package com.njzscloud.common.localizer.htzj;

import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
import com.njzscloud.common.localizer.contant.BodyCharset;
import com.njzscloud.common.localizer.htzj.listener.HtzjListeners;
import com.njzscloud.common.localizer.jt808.JT808;
import com.njzscloud.common.localizer.jt808.message.JT808Message;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class Htzj {
    private static HtzjListeners htzjListeners = new HtzjListeners();

    public static void init() {
        htzjListeners = new HtzjListeners();
    }

    /**
     * 发送指令
     * <pre>
     * 查询设备终端所有参数指令 SR
     * 查询设备号 devid?
     * 设备重启 reset
     * 查询设置震动报警和灵敏度参数指令  wakelv,8     数字越小越灵敏   数字越大越不灵敏
     * 格式nmset,0,X
     *     X表示定位间隔，可设置3~600，单位：秒
     * 例
     * nmset,0,30
     *     设置工作模式0，定位间隔30秒
     * nmset,0,180
     *     设置工作模式0，定位间隔3分钟</pre>
     *
     * @param terminalId 终端ID
     * @param directive  指令
     */
    public static void sendDirective(String terminalId, String directive) {
        log.info("发送航天紫金指令，终端ID：{}，指令：{}", terminalId, directive);
        JT808.sendTxtMessage(terminalId, directive, BodyCharset.ASCII);
    }

    /**
     * 开启追踪
     *
     * @param terminalId 终端ID
     * @param interval   上报间隔，单位秒，0-3600秒，0表示不追踪
     */
    public static void track(String terminalId, int interval) {
        if (interval < 3) {
            interval = 3;
        } else if (interval > 600) {
            interval = 600;
        }
        log.info("开启航天紫金追踪，终端ID：{}，上报间隔：{}秒，3 秒后重启设备", terminalId, interval);
        sendDirective(terminalId, StrUtil.format("nmset,0,{}", interval));
        ThreadUtil.sleep(3000);
        sendDirective(terminalId, "reset");
    }

    /**
     * 获取设备信息
     *
     * @param terminalId 终端ID
     */
    public static void obtainDeviceInfo(String terminalId) {
    }

    /**
     * 启用报警
     *
     * @param terminalId 终端ID
     */
    public static void enableWarn(String terminalId, boolean enable) {
    }

    /**
     * 设置速度报警
     *
     * @param terminalId 终端ID
     * @param speed      速度，单位km/h
     */
    public static void speedThreshold(String terminalId, int speed) {
    }


    /**
     * 修改设备的连接地址
     *
     * @param terminalId 终端 Id
     * @param ip         服务器 IP
     * @param port       服务器端口
     */
    public static void configIpPort(String terminalId, String ip, int port) {
    }

    /**
     * 获取当前位置
     *
     * @param terminalId 终端ID
     */
    public static void currentLocation(String terminalId) {
        log.info("航天紫金获当前位置，终端ID：{}", terminalId);
        JT808Message baseMessage = JT808.createBaseMessage(terminalId, 0x8201);
        JT808.sendMessage(baseMessage);
    }
}
