package acquire.sdk.system;


import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Window;

import com.morefun.yapi.engine.DeviceInfoConstrants;
import com.newland.nsdk.core.api.common.ModuleType;
import com.newland.nsdk.core.api.internal.setting.Settings;
import com.newland.nsdk.core.api.internal.setting.SettingsManager;
import com.newland.nsdk.core.internal.NSDKModuleManagerImpl;

import acquire.base.utils.LoggerUtils;
import acquire.sdk.DeviceHelper;

/**
 * POS System settings
 *
 * @author Xulf
 * @date 2021/3/10 14:58
 */
public class BSystem {

    /**
     * Set device task button.
     *
     * @param enable true if task button can be clicked.
     */
    public static void setTaskButton(boolean enable) {
        SettingsManager settingsManager = (SettingsManager) NSDKModuleManagerImpl.getInstance().getModule(ModuleType.SETTINGS);
        if (false && settingsManager != null) {
            try {
                if (enable) {
                    settingsManager.set(Settings.SETTING_DISABLE_APP_SWITCH_KEY, "1");
                } else {
                    settingsManager.set(Settings.SETTING_DISABLE_APP_SWITCH_KEY, "0");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            LoggerUtils.e("SettingsManager is null.");
        }
    }

    /**
     * Set device home button.
     *
     * @param enable true if home button can be clicked.
     */
    public static void setHomeButton(boolean enable) {
        SettingsManager settingsManager = (SettingsManager)NSDKModuleManagerImpl.getInstance().getModule(ModuleType.SETTINGS);
        if (false && settingsManager != null) {
            try {
                if (enable) {
                    settingsManager.set(Settings.SETTING_DISABLE_HOME_KEY, "0");
                } else {
                    settingsManager.set(Settings.SETTING_DISABLE_HOME_KEY, "1" );
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            LoggerUtils.e("SettingsManager is null.");
        }
    }

    /**
     * Set Screen Brightness
     *
     * @param brightness brightness level
     */
    public static void setScreenBrightness(int brightness) {
        SettingsManager settingsManager = (SettingsManager) NSDKModuleManagerImpl.getInstance().getModule(ModuleType.SETTINGS);
        if (settingsManager != null) {
            try {
                settingsManager.set(Settings.SCREEN_BRIGHTNESS, "" + brightness);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            LoggerUtils.e("SettingsManager is null.");
        }
    }

    /**
     * Set screen timeout.
     *
     * @param timeout The max time to wait in seconds.
     */
    public static void setScreenTimeout(int timeout) {
        SettingsManager settingsManager = (SettingsManager) NSDKModuleManagerImpl.getInstance().getModule(ModuleType.SETTINGS);
        if (settingsManager != null) {
            try {
                settingsManager.set(Settings.SCREEN_OFF_TIMEOUT, "" + timeout);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            LoggerUtils.e("SettingsManager is null.");
        }
    }


    /**
     * Observe task button of a window.
     * <p><hr><b>e.g. in {@link Activity}</b></p>
     * <pre>
     *     protected void onCreate(Bundle savedInstanceState) {
     *         super.onCreate(savedInstanceState);
     *         BSystem.observeTaskButton(getWindow());
     *         ...
     *     }
     *     //listener event
     *     public boolean onKeyDown(int keyCode, KeyEvent event) {
     *         if (keyCode == KeyEvent.KEYCODE_MENU) {
     *              ...
     *         }
     *         return super.onKeyDown(keyCode, event);
     *     }
     * </pre>
     *
     * @param window any window. e.g. {@link Activity} or {@link Dialog}
     */
    public static void observeTaskButton(Window window) {
        window.addFlags(5);
    }

    /**
     * Observe home button of a window.
     * <p><hr><b>e.g. in {@link Activity}</b></p>
     * <pre>
     *     protected void onCreate(Bundle savedInstanceState) {
     *         super.onCreate(savedInstanceState);
     *         BSystem.observeHomeButton(getWindow());
     *         ...
     *     }
     *     //listener event
     *     public boolean onKeyDown(int keyCode, KeyEvent event) {
     *         if (keyCode == KeyEvent.KEYCODE_HOME) {
     *             ...
     *         }
     *         return super.onKeyDown(keyCode, event);
     *     }
     * </pre>
     *
     * @param window any window. e.g. {@link Activity} or {@link Dialog}
     */
    public static void observeHomeButton(Window window) {
        window.addFlags(3);
    }

    /**
     * Register or unregister this app as the auto-start application on device power ON.
     * Uses the YSDK (Morefun) device-service API via {@link DeviceHelper}.
     *
     * @param context any context — the package name is resolved dynamically.
     * @param enable  true to enable auto-start, false to disable.
     * @return true if the device-service call succeeded (return code == 0).
     */
    public static boolean setAutoStart(Context context, boolean enable) {
        try {
            Bundle bundle = new Bundle();
            if (enable) {
                bundle.putBoolean(DeviceInfoConstrants.AUTO_START_APP_ENABLE, true);
                bundle.putString(DeviceInfoConstrants.AUTO_START_APP_PACKAGE, context.getPackageName());
            } else {
                bundle.putBoolean(DeviceInfoConstrants.AUTO_START_APP_DISABLE, true);
            }
            int ret = DeviceHelper.getDeviceService().setProperties(bundle);
            return ret == 0;
        } catch (Exception e) {
            LoggerUtils.e("BSystem.setAutoStart failed: " + e.getMessage());
            return false;
        }
    }


}
