package com.example.iot_controlhost.utils.global;

import com.blankj.utilcode.util.GsonUtils;
import com.blankj.utilcode.util.StringUtils;
import com.example.iot_controlhost.model.net.FaceCheck;
import com.example.iot_controlhost.utils.MMKVUtil;
import com.google.gson.reflect.TypeToken;

import java.util.HashMap;
import java.util.Map;

/**
 * 房间相关配置
 */
public class RoomSetting {
    /**
     * 房间可用与否
     */
    public static final String ROOM_ENABLE = "房间可用";
    /**
     * 房间名称
     */
    public static final String ROOM_NAME = "房间名称";
    /**
     * 配置密码
     */
    public static final String SET_PASSWORD = "配置密码";
    /**
     * 农户名称
     */
    public static final String USER_NAME = "农户名称";
    /**
     * 区域ID
     * 用于发送给服务器
     */
    public static final String AREA_CODE = "区域码";
    /**
     * 当前模式
     * 0手动 1自动 2智能
     */
    public static final String MODE = "当前模式";
    /**
     * 当前工作内容
     */
    public static final String WORK_STATE = "WORK_STATE";
    /**
     * 主界面锁屏密码
     */
    public static final String MAIN_ACTIVITY_LOCK = "主界面屏幕锁密码";
    /**
     * 主题
     * 是否为黑色主题
     */
    public static final String IS_DARK_THEME = "IS_DARK_THEME";
    /**
     * 上次配置的时间
     */
    public static final String SET_TIME = "上次配置时间戳";

    /**
     * 主界面无操作超时时间
     * 超过该时间则操作需要先输入密码
     * 单位：秒
     */
    public static final String MAIN_ACTIVITY_OPERATE_LOCK_TIMEOUT = "屏幕锁时间（单位秒）";
    /**
     * 当前房间类别
     * 1共育室  2装配共育室  3大蚕房   4催青室    5保种室    6小白盒    0未定义
     */
    public static final String TYPE = "TYPE";
    /**
     * 自动亮暗模式调节开关
     */
    public static final String AUTO_LIGHT_NIGHT = "自动亮暗模式调节";
    /**
     * 共育室纬度
     */
    public static final String ROOM_LATITUDE_LATITUDE = "共育室坐标-纬度";
    /**
     * 共育室经度
     */
    public static final String ROOM_COORDINATE_LONGITUDE = "共育室坐标-经度";
    /**
     * 人脸识别激活状态
     */
    public static final String FACE_IS_ACTIVATED = "FACE_IS_ACTIVATED";
    /**
     * Token
     */
    public static final String TOKEN = "TOKEN_BEARER";
    /**
     * 当前在操作的用户
     * 利用人脸识别结果获取
     */
    public static final String USER = "USER";
    /**
     * 空调是否在强制关闭期间
     */
    public static final String IS_AIR_CONDITION_FORCE_CLOSE = "IS_AIR_CONDITION_FORCE_CLOSE";
    /**
     * 空调是否在强制关闭期间-是否开启
     * 如果这里关闭，那么即使设置了强制关闭，空调也不会被强制关闭
     */
    public static final String IS_AIR_CONDITION_FORCE_CLOSE_ENABLE = "IS_AIR_CONDITION_FORCE_CLOSE_ENABLE";

    public static boolean isAirConditionForceCloseEnable() {
        return MMKVUtil.get(IS_AIR_CONDITION_FORCE_CLOSE_ENABLE, true);
    }
    /**
     * 空调指令是否循环发送
     */
    public static final String AIR_RECYCLE_CONTROL = "AIR_RECYCLE_CONTROL";

    public static boolean isAirRecycleControl() {
        return MMKVUtil.get(AIR_RECYCLE_CONTROL, false);
    }

    public static boolean isAirConditionForceClose() {
        return MMKVUtil.get(IS_AIR_CONDITION_FORCE_CLOSE, false);
    }

    public static String getRoomName() {
        return MMKVUtil.get(ROOM_NAME, "无名房间");
    }

    public static FaceCheck.DataDTO getUser() {
        return GsonUtils.fromJson(MMKVUtil.get(USER), FaceCheck.DataDTO.class);
    }

    /**
     * 获取房间-纬度   默认北京
     */
    public static double getRoomCoordinateLatitude() {
        // 北京(30.67, 104.06)
        // 成都(39.90, 116.40)
        return MMKVUtil.get(ROOM_LATITUDE_LATITUDE, 39.9041999);
    }

    /**
     * 获取房间-经度   默认北京
     */
    public static double getRoomCoordinateLongitude() {
        // 北京(30.67, 104.06)
        // 成都(39.90, 116.40)
        return MMKVUtil.get(ROOM_COORDINATE_LONGITUDE, 116.4073963);
    }

    public static boolean getAutoLightNight() {
        return MMKVUtil.get(AUTO_LIGHT_NIGHT, true);
    }

    /**
     * 当前房间类别
     * 1共育室  2装配共育室  3大蚕房   4催青室    5保种室    6小白盒    0未定义
     */
    public static int getType() {
        return MMKVUtil.get(TYPE, 1);
    }

    /**
     * 预警类型
     */
    public static final String NOTICE_TYPE = "预警类型";
    public static final String[] NOTICE_TYPE_SPINNER = {"不通知", "公众号", "公众号与电话"};

    public static String getNoticeType() {
        return MMKVUtil.get(NOTICE_TYPE, NOTICE_TYPE_SPINNER[2]);
    }

    public static long getMainActivityOperateLockTimeOut() {
        return MMKVUtil.get(MAIN_ACTIVITY_OPERATE_LOCK_TIMEOUT, 5 * 60);
    }


    public static void setSetTime(long time) {
        MMKVUtil.put(SET_TIME, time);
    }

    public static long getSetTime() {
        return MMKVUtil.get(SET_TIME, 0L);
    }

    public static boolean isRoomEnable() {
        return MMKVUtil.get(ROOM_ENABLE, true);
    }

    public static void setRoomEnable(boolean state) {
        MMKVUtil.put(ROOM_ENABLE, state);
    }

    /**
     * 当前模式
     *
     * @return 0手动 1自动 2智能
     */
    public static int getMode() {
        return MMKVUtil.get(MODE, 0);
    }

    public static String getUserName() {
        return MMKVUtil.get(USER_NAME, "未配置");
    }

    public static String getAreaCode() {
        return MMKVUtil.get(AREA_CODE, "未配置");
    }

    public static String getSetPassword() {
        return MMKVUtil.get(SET_PASSWORD, "112233");
    }

    public static String getMainActivityLock() {
        return MMKVUtil.get(MAIN_ACTIVITY_LOCK, "123456");
    }

    public static boolean isDarkTheme() {
        return MMKVUtil.get(IS_DARK_THEME, false);
    }

    /**
     * 用于标记是否处于工作中，内容值为Map,
     * name:工作名
     * data：服务器返回的唯一工作标识Data
     * 当为空时表示当前未在工作，
     */
    public static Map<String, String> getWorkState() {
        String json = MMKVUtil.get(WORK_STATE);
        if (StringUtils.isEmpty(json)) {
            return null;
        } else {
            Map<String, String> a = GsonUtils.fromJson(json, new TypeToken<HashMap<String, String>>() {
            }.getType());
            return a;
        }
    }

    public static boolean isFaceActivated() {
        return !StringUtils.isEmpty(MMKVUtil.get(FACE_IS_ACTIVATED));
    }

    /**
     * 地暖别名
     */
    public static final String FLOOR_NAME = "FLOOR_NAME";

    public static String getFloorName() {
        return MMKVUtil.get(FLOOR_NAME, RoomController.floor.getName());
    }

    /**
     * 空调后台线程监测当前红外状态以调节空调物理开关的循环检查时间
     * 单位：秒
     */
    public static final String TIME_OF_AIR_STOP_RELAY = "TIME_OF_AIR_STOP_RELAY";

    public static long getTimeOfAirStopRelay() {
        return MMKVUtil.get(TIME_OF_AIR_STOP_RELAY, 4 * 60);
    }

    /***
     * 控制空调时先开开关后调节温度
     * boolean
     */
    public static final String CONTROL_AIR_START_FIRST = "CONTROL_AIR_START_FIRST";
    public static boolean isAirStartFirst() {
        return MMKVUtil.get(CONTROL_AIR_START_FIRST, true);
    }
    /***
     * 全局手动调整温度偏差
     * double
     */
    public static final String BIAS_TEMP = "BIAS_TEMP";
    public static double getBiasTemp() {
        return MMKVUtil.get(BIAS_TEMP, 0.0);
    }
    /***
     * 全局手动调整温度偏差
     * double
     */
    public static final String BIAS_HUMIDITY = "BIAS_HUMIDITY";
    public static double getBiasHumidity() {
        return MMKVUtil.get(BIAS_HUMIDITY, 0.0);
    }

}
