package com.sobot.widget.ui.notchlib;

import android.app.Activity;
import android.graphics.Rect;
import android.os.Build;

import com.sobot.widget.ui.notchlib.impl.AndroidPNotchScreen;
import com.sobot.widget.ui.notchlib.impl.HuaweiNotchScreen;
import com.sobot.widget.ui.notchlib.impl.MiNotchScreen;
import com.sobot.widget.ui.notchlib.impl.OppoNotchScreen;
import com.sobot.widget.ui.notchlib.impl.VivoNotchScreen;
import com.sobot.widget.ui.notchlib.utils.RomUtils;

import java.util.List;

public class SobotNotchScreenManager {

    private static final SobotNotchScreenManager instance = new SobotNotchScreenManager();
    private final SobotINotchScreen notchScreen;

    private SobotNotchScreenManager() {
        notchScreen = getNotchScreen();
    }

    public static SobotNotchScreenManager getInstance() {
        return instance;
    }

    public void setDisplayInNotch(Activity activity) {
        if (notchScreen != null)
            notchScreen.setDisplayInNotch(activity);
    }

    public void getNotchInfo(final Activity activity, final SobotINotchScreen.NotchScreenCallback notchScreenCallback) {
        final SobotINotchScreen.NotchScreenInfo notchScreenInfo = new SobotINotchScreen.NotchScreenInfo();
        if (notchScreen != null && notchScreen.hasNotch(activity)) {
            notchScreen.getNotchRect(activity, new SobotINotchScreen.NotchSizeCallback() {
                @Override
                public void onResult(List<Rect> notchRects) {
                    if (notchRects != null && notchRects.size() > 0) {
                        notchScreenInfo.hasNotch = true;
                        notchScreenInfo.notchRects = notchRects;
                    }
                    notchScreenCallback.onResult(notchScreenInfo);
                }
            });
        } else {
            notchScreenCallback.onResult(notchScreenInfo);
        }
    }

    private boolean res = false;

    public boolean hasNotch(final Activity activity) {

        if (notchScreen != null && notchScreen.hasNotch(activity)) {
            notchScreen.getNotchRect(activity, new SobotINotchScreen.NotchSizeCallback() {
                @Override
                public void onResult(List<Rect> notchRects) {
                    if (notchRects != null && notchRects.size() > 0) {
                        res = true;
                    }
                }
            });
        }
        return res;
    }

    private SobotINotchScreen getNotchScreen() {
        SobotINotchScreen notchScreen = null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) notchScreen = new AndroidPNotchScreen();
        else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            if (RomUtils.isHuawei()) {
                notchScreen = new HuaweiNotchScreen();
            } else if (RomUtils.isOppo()) {
                notchScreen = new OppoNotchScreen();
            } else if (RomUtils.isVivo()) {
                notchScreen = new VivoNotchScreen();
            } else if (RomUtils.isXiaomi()) {
                notchScreen = new MiNotchScreen();
            }
        }
        return notchScreen;
    }
}
