package com.neptune.plugin;

import com.getcapacitor.JSObject;
import com.getcapacitor.PluginCall;
import com.neptune.modules.Sys;
import com.neptune.plugin.models.BaseInfoModel;
import com.neptune.plugin.models.BeepModel;
import com.neptune.utils.MyLog;
import com.pax.dal.entity.ETermInfoKey;

import org.json.JSONException;

import java.util.Map;

public class NeptuneSysHandler {

    public static void sysTermInfo(PluginCall call) {
        MyLog.logI("Starting sysTermInfo");

        JSObject ret = new JSObject();

        try {
            Map<ETermInfoKey, String> termInfo = Sys.getInstance().getTermInfo();
            JSObject jo = new JSObject();
            for (ETermInfoKey key : ETermInfoKey.values()) {
                jo.put(key.name(), (termInfo.get(key)!=null)?termInfo.get(key):"");
            }
            ret.put("value", jo);
            call.success(ret);
        } catch (Exception e) {
            MyLog.logE(e.getMessage());
            call.reject(e.getMessage(), e);
        }
    }

    public static void sysBaseInfo(PluginCall call) {
        MyLog.logI("Starting sysBaseInfo");
        JSObject ret = new JSObject();
        try {
            BaseInfoModel info= new BaseInfoModel(Sys.getInstance().getBaseInfo());
            ret.put("value", info.toJSON());
            call.success(ret);
        }catch(Exception e){
            MyLog.logE(e.getMessage());
            call.reject(e.getMessage(), e);
        }
    }

    public static void sysBeep(PluginCall call) {
        MyLog.logI("Starting sysBeep");

        JSObject ret = new JSObject();
        JSObject req = call.getData();
        JSObject value = req.getJSObject("value");

        try {
            BeepModel beep = new BeepModel(value);
            Sys.getInstance().beep(beep.getBeepMode(), beep.getDelayTime());
            ret.put("value", NeptuneErrors.NEPTUNE_ERR_OK.name());
            call.success(ret);

        } catch (JSONException e) {
            MyLog.logE(e.getMessage());
            call.reject(e.getMessage(), e);
        } catch (Exception e) {
            MyLog.logE(e.getMessage());
            call.reject(e.getMessage(), e);
        }
    }


    public static void sysReboot(PluginCall call) {
        MyLog.logI("Starting sysReboot");
        JSObject ret = new JSObject();
        try {
            Sys.getInstance().reboot();
            ret.put("value", NeptuneErrors.NEPTUNE_ERR_OK.name());
            call.success(ret);
        }catch(Exception e){
            MyLog.logE(e.getMessage());
            call.reject(e.getMessage(), e);
        }
    }

    public static void sysShutdown(PluginCall call) {
        MyLog.logI("Starting sysShutdown");
        JSObject ret = new JSObject();
        try {
            Sys.getInstance().shutdown();
            ret.put("value", NeptuneErrors.NEPTUNE_ERR_OK.name());
            call.success(ret);
        }catch(Exception e){
            MyLog.logE(e.getMessage());
            call.reject(e.getMessage(), e);
        }
    }


    public static void sysShowNavigationBar(PluginCall call) {
        MyLog.logI("Starting sysShowNavigationBar");
        JSObject ret = new JSObject();
        JSObject req = call.getData();

        try {
            boolean value = req.getBoolean("value");
            Sys.getInstance().showNavigationBar(value);
            ret.put("value", NeptuneErrors.NEPTUNE_ERR_OK.name());
            call.success(ret);
        }catch(Exception e){
            MyLog.logE(e.getMessage());
            call.reject(e.getMessage(), e);
        }
    }

    public static void isNavigationBarVisible(PluginCall call) {
        MyLog.logI("Starting isNavigationBarVisible");
        JSObject ret = new JSObject();
        JSObject req = call.getData();

        try {
            ret.put("value", Sys.getInstance().isNavigationBarVisible());
            call.success(ret);
        }catch(Exception e){
            MyLog.logE(e.getMessage());
            call.reject(e.getMessage(), e);
        }
    }


    public static void isNavigationBarEnabled(PluginCall call) {
        MyLog.logI("Starting isNavigationBarEnabled");
        JSObject ret = new JSObject();
        JSObject req = call.getData();

        try {
            ret.put("value", Sys.getInstance().isNavigationBarEnabled());
            call.success(ret);
        }catch(Exception e){
            MyLog.logE(e.getMessage());
            call.reject(e.getMessage(), e);
        }
    }


    public static void sysShowStatusBar(PluginCall call) {
        MyLog.logI("Starting sysShowStatusBar");
        JSObject ret = new JSObject();
        JSObject req = call.getData();
        try {
            boolean value = req.getBoolean("value");
            Sys.getInstance().showStatusBar(value);
            ret.put("value", NeptuneErrors.NEPTUNE_ERR_OK.name());
            call.success(ret);
        }catch(Exception e){
            MyLog.logE(e.getMessage());
            call.reject(e.getMessage(), e);
        }
    }


    public static void isStatusBarVisible(PluginCall call) {
        MyLog.logI("Starting isStatusBarVisible");
        JSObject ret = new JSObject();
        JSObject req = call.getData();

        try {
            ret.put("value", Sys.getInstance().isStatusBarVisible());
            call.success(ret);
        }catch(Exception e){
            MyLog.logE(e.getMessage());
            call.reject(e.getMessage(), e);
        }
    }

    public static void isStatusBarEnabled(PluginCall call) {
        MyLog.logI("Starting isStatusBarVisible");
        JSObject ret = new JSObject();
        JSObject req = call.getData();

        try {
            ret.put("value", Sys.getInstance().isStatusBarEnabled());
            call.success(ret);
        }catch(Exception e){
            MyLog.logE(e.getMessage());
            call.reject(e.getMessage(), e);
        }
    }




}
