package com.example.iot_controlhost.model.controller.relay;

import com.example.iot_controlhost.R;
import com.example.iot_controlhost.utils.MMKVUtil;
import com.example.iot_controlhost.utils.global.RoomController;
import com.example.iot_controlhost.utils.global.Variable;
import com.example.iot_controlhost.utils.log.MyLog;

/**
 * @Description 除湿机，核心控制地方 物理位置
 * @Author DuanKaiji
 * @CreateTime 2023年12月11日 09:35:18
 */
public class Dehumidifier extends Relay {
    public Dehumidifier(String name) {
        super(name, R.mipmap.ven_open, R.mipmap.ven_close);
    }

    @Override
    public boolean isAvailable() {
        // 除湿机的可用性取决于除湿机-继电器和除湿机-红外遥控器的可用性
        return super.isAvailable() && RoomController.dehumidifierInfrared.isAvailable();
    }

    public boolean setPowerSupplyForOld(boolean state) {
        // 设置继电器 物理开关的方法
        return super.setPowerSupply(state);
    }

    @Override
    public boolean setPowerSupply(boolean state) {
        // 设置红外与物理开的方法
        boolean result;
        if (state) {
            //开除湿机：开除湿机物理开关->开遥控开关
            if (!this.powerSupply) {
                MyLog.controller("除湿机电源当前为关闭状态，现开启除湿机物理开关");
                if (setPowerSupplyForOld(true)) {
                    try {
                        MyLog.controller("除湿机电源打开成功，等待" + Variable.WAIT_START_INFRARED_FOR_DEHUMIDIFIER / 1000 + "s后使用红外遥控器打开除湿机");
                        Thread.sleep(Variable.WAIT_START_INFRARED_FOR_DEHUMIDIFIER);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                } else {
                    MyLog.controllerError("除湿机电源打开失败");
                    return false;
                }
            }
            //开机：先开机指令01，再调节指令setAirCondition
            MyLog.controller("除湿机红外：开机");
            String str = getAddress() + "06000100C8";
            result = executeInstructions(str + getCRC(str), "开电源");
            // 设置开机成功与否
            this.powerSupply = result;
            // 设置红外状态
            RoomController.dehumidifierInfrared.setPowerSupply(result);
        } else {
            //关机
            MyLog.controller("除湿机红外：关电源");
            String str = getAddress() + "06000100C9";
            String crc = getCRC(str);
            str = str + crc;
            result = executeInstructions(str, "关电源");
            if (result) {
                //关机成功 设置红外状态
                RoomController.dehumidifierInfrared.setPowerSupply(false);
                this.powerSupply = false;
            }
            //延迟一个Variable.CHECK_CLOSE_INFRARED时间来关闭除湿机物理电源
            RoomController.doNotNeedDelayCloseDehumidifier = false;
        }
        return result;
    }

    /**
     * 获取空调型号
     * 因为getModel()方法在Relay中的setPowerSupply()中会被用来分辨获取继电器开关指令
     * 所以不能直接重写getModel()与setModel()
     */
    public String getAirConditionModel() {
        return MMKVUtil.get(name + "型号", "默认");
    }

    public void setAirConditionModel(String model) {
        MMKVUtil.put(name + "型号", model);
    }

    public String getAirConditionModel2() {
        return MMKVUtil.get(name + "2型号", "默认");
    }

    public void setAirConditionModel2(String model) {
        MMKVUtil.put(name + "2型号", model);
    }
}
