package com.njzscloud.common.localizer.tuqiang;

import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.njzscloud.common.localizer.jt808.JT808;
import com.njzscloud.common.localizer.jt808.message.JT808Message;
import com.njzscloud.common.localizer.tuqiang.listener.TuqiangListeners;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class Tuqiang {
    private static TuqiangListeners tuqiangListeners;

    public static void init() {
        tuqiangListeners = new TuqiangListeners();
    }

    /**
     * 发送指令
     *
     * @param terminalId 终端ID
     * @param directive  指令
     */
    public static void sendDirective(String terminalId, String directive) {
        log.info("发送途强指令，终端ID：{}，指令：{}", terminalId, directive);
        JT808.sendTxtMessage(terminalId, directive);
    }

    /**
     * 开启追踪
     *
     * @param terminalId 终端ID
     * @param interval   上报间隔，单位秒，0-600秒，0表示不追踪
     */
    public static void track(String terminalId, int interval) {
        if (interval < 1) {
            interval = 1;
        } else if (interval > 600) {
            interval = 600;
        }
        log.info("开启途强追踪，终端ID：{}，上报间隔：{}秒", terminalId, interval);
        JT808.sendTxtMessage(terminalId, StrUtil.format("<SPBSJ*P:BSJGPS*C:{}*H:300>", interval));
    }

    /**
     * 获取设备信息
     *
     * @param terminalId 终端ID
     */
    public static void obtainDeviceInfo(String terminalId) {
        log.info("获取途强设备信息，终端ID：{}", terminalId);
        JT808.sendTxtMessage(terminalId, "<CKBSJ>");
    }

    /**
     * 启用报警
     *
     * @param terminalId 终端ID
     */
    public static void enableWarn(String terminalId, boolean enable) {
        log.info("设置途强报警，终端ID：{}，是否启用：{}", terminalId, enable);
        JT808.sendTxtMessage(terminalId, StrUtil.format("<SPBSJ*P:BSJGPS*6W:{}>", enable ? 1 : 0));
    }

    /**
     * 设置速度报警
     *
     * @param terminalId 终端ID
     * @param speed      速度，单位km/h
     */
    public static void speedThreshold(String terminalId, int speed) {
        log.info("设置途强速度报警，终端ID：{}，速度：{}km/h", terminalId, speed);
        JT808.sendTxtMessage(terminalId, StrUtil.format("<SPBSJ*P:BSJGPS*CS:{}*H:300>", speed));
    }


    /**
     * 修改设备的连接地址
     *
     * @param terminalId 终端 Id
     * @param ip         服务器 IP
     * @param port       服务器端口
     */
    public static void configIpPort(String terminalId, String ip, int port) {
        log.info("设置途强设备连接地址，终端ID：{}，IP：{}，端口：{}", terminalId, ip, port);
        Assert.notEmpty(terminalId);
        Assert.notEmpty(ip);
        Assert.isTrue(port > 0);
        JT808.sendTxtMessage(terminalId, StrUtil.format("<SPBSJ*P:BSJGPS*T:{},{}*N:{}>", ip, port, terminalId));
    }

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