package com.fizz.business.domain.dto;

import lombok.Data;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;

/**
 * 创建发送任务 DTO
 */
@Data
public class SendJobCreateDTO {

    /** 目标设备/产线名称 (如 CGL_LINE_1, FURNACE_A) */
    @NotBlank(message = "deviceName不能为空")
    private String deviceName;

    /** 计划发送时间 */
    private Date planSendTime;

    /** 操作员ID */
    private Long operatorId;

    /** 操作员姓名 */
    private String operatorName;

    /** 分组列表 */
    @Valid
    @NotNull(message = "groups不能为空")
    @Size(min = 1, message = "至少需要一个分组")
    private List<GroupDTO> groups;

    @Data
    public static class GroupDTO {

        /** 在本批次内的组序号 */
        @NotNull(message = "groupNo不能为空")
        private Integer groupNo;

        /** 组类型: DRIVE(传动), FURNACE(炉火) */
        @NotBlank(message = "groupType不能为空")
        private String groupType;

        /** 组名称 (可选) */
        private String groupName;

        /** 参数项列表 */
        @Valid
        @NotNull(message = "items不能为空")
        @Size(min = 1, message = "至少需要一个参数项")
        private List<ItemDTO> items;
    }

    @Data
    public static class ItemDTO {

        /** 参数业务编码 */
        private String paramCode;

        /** 设定地址 (OPC地址) */
        @NotBlank(message = "address不能为空")
        private String address;

        /** 设定的原始值 */
        private String valueRaw;

        /** 参数的设定时间 */
        private Date setTime;
    }
}

