package com.njzscloud.supervisory.device.drive.barrier.generic;

import cn.hutool.core.util.IdUtil;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;

@Getter
@Setter
@ToString
@Accessors(chain = true)
public class IoParam {
    /**
     * 消息 ID，用于关联具体消息
     */
    private String id;
    /**
     * 设备序列号
     */
    private String sn;
    /**
     * 消息名称
     */
    private String name;
    /**
     * 消息版本，目前都填 1.0
     */
    private String version;
    /**
     * 消息时间戳，单位秒
     */
    private Integer timestamp;
    private Payload payload;

    public static IoParam defaultParam() {
        return new IoParam()
                .setId(IdUtil.fastSimpleUUID())
                .setName("gpio_out")
                .setVersion("1.0")
                .setTimestamp((int) (System.currentTimeMillis() / 1000))
                .setPayload(new Payload()
                        .setType("gpio_out")
                        .setBody(new Body()
                                .setDelay(500)
                                .setIo(0)
                                .setValue(2)
                        )
                )
                ;
    }

    @Getter
    @Setter
    @ToString
    @Accessors(chain = true)
    public static class Body {
        /**
         * 延 时 时 间 ms ， 取 值 范 围 为
         * [500,5000]之间的整数
         */
        private Integer delay;
        /**
         * 对应的输出 IO 编号，取值范围为
         * [0,3]之间的整数
         */
        private Integer io;
        /**
         * 输出 IO 的状态值 0 断, 1 通 ,2 先
         * 通后断，取值范围为[0,2]之间的整数
         */
        private Integer value;
    }

    @Getter
    @Setter
    @ToString
    @Accessors(chain = true)
    public static class Payload {
        /**
         * 消息类型
         */
        private String type;
        /**
         * 消息体
         */
        private Body body;

    }
}
