package com.gzlh.device.plc.handler;

import cn.hutool.core.util.StrUtil;
import com.gzlh.bus.EventConfig;
import com.gzlh.config.dto.SerialSetting;
import com.gzlh.device.plc.action.PLCAction;
import com.gzlh.device.plc.client.PlcNettyConfig;
import com.gzlh.utils.ModbusUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
@Slf4j
public class PLCHadnler {
    @Resource
    private PlcNettyConfig plcNettyConfig;
    private final String COMMAND_PREFIX="010500";
    private final String COMMAND_ON="FF00";
    private final String COMMAND_OFF="0000";

    public void handlerAction(String action){
      SerialSetting serialSetting= EventConfig.serialSetting;
        if (StrUtil.equals(action, PLCAction.RED_LIGHT_ON)){
            //亮红灯
            String redPoint= serialSetting.getPlc().getOut().getSignalRedPoint();
            String command= COMMAND_PREFIX+redPoint+COMMAND_ON;
            log.info("plc发送消息:{}",command);
            String packData= ModbusUtils.buildRequestPacket(command);
           plcNettyConfig.send(packData);
        }else if (StrUtil.equals(action, PLCAction.RED_LIGHT_OFF)){
            //灭红灯
            String redPoint= serialSetting.getPlc().getOut().getSignalRedPoint();
            String command= COMMAND_PREFIX+redPoint+COMMAND_OFF;
            log.info("plc发送消息:{}",command);
            String packData= ModbusUtils.buildRequestPacket(command);
            plcNettyConfig.send(packData);
        }else if (StrUtil.equals(action, PLCAction.GREEN_LIGHT_ON)){
            //亮绿灯
            String greenPoint= serialSetting.getPlc().getOut().getSignalGreenPoint();
            String command= COMMAND_PREFIX+greenPoint+COMMAND_ON;
            log.info("plc发送消息:{}",command);
            String packData= ModbusUtils.buildRequestPacket(command);
            plcNettyConfig.send(packData);
        }else if (StrUtil.equals(action, PLCAction.GREEN_LIGHT_OFF)){
            //灭绿灯
            String greenPoint= serialSetting.getPlc().getOut().getSignalGreenPoint();
            String command= COMMAND_PREFIX+greenPoint+COMMAND_OFF;
            log.info("plc发送消息:{}",command);
            String packData= ModbusUtils.buildRequestPacket(command);
            plcNettyConfig.send(packData);
        }else if (StrUtil.equals(action, PLCAction.RAILING_RISE_ON)){
            //抬杆
            String gatePoint= serialSetting.getPlc().getOut().getGatePoint();
            String command= COMMAND_PREFIX+gatePoint+COMMAND_ON;
            log.info("plc发送消息:{}",command);
            String packData= ModbusUtils.buildRequestPacket(command);
            plcNettyConfig.send(packData);
        }else if (StrUtil.equals(action, PLCAction.RAILING_RISE_OFF)){
            //抬杆关闭
            String gatePoint= serialSetting.getPlc().getOut().getGatePoint();
            String command= COMMAND_PREFIX+gatePoint+COMMAND_OFF;
            log.info("plc发送消息:{}",command);
            String packData= ModbusUtils.buildRequestPacket(command);
            plcNettyConfig.send(packData);
        }
    }

}