package org.ta.pddserver.model.pddjy.request;

import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;
import java.io.Serializable;
import java.util.List;

@EqualsAndHashCode(callSuper = true)
@Data
public class PddServiceConsoCoBizActionNotifyRequest extends JYBaseRequestModel implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 服务商code（必填）
     */
    private String providerCode;

    /**
     * 合包单号（必填）
     */
    private String orderCode;

    /**
     * 实操动作（必填）
     * <p>begin_pick:开始拣货；finish_pick：拣货完成；finish_unpack：拆包完成</p>
     */
    private String bizAction;

    /**
     * 实操描述（必填）
     */
    private String bizActionDesc;

    /**
     * 实操时间（必填，格式：yyyy-MM-dd HH:mm:ss）
     */
    private String executeTime;

    /**
     * 时区（非必填，默认北京时区：UTC+8）
     */
    private String timeZone;

    /**
     * 拆包备注（非必填）
     * <p>仅实操为finish_unpack（拆包完成）时传；若运输方式变化（如空转海），此字段必填</p>
     */
    private String unpackRemark;

    /**
     * 包裹详情列表（非必填，仅实操为finish_unpack（拆包完成）时必传）
     */
    private List<PackageInfo> packageInfos;

    /**
     * 实操结果信息（必填）
     */
    private Result result;


    /**
     * 包裹详情
     */
    @Data
    public static class PackageInfo {
        /**
         * 包裹长度（必填，单位：厘米）
         */
        private Long length;

        /**
         * 包裹宽度（必填，单位：厘米）
         */
        private Long width;

        /**
         * 包裹高度（必填，单位：厘米）
         */
        private Long height;

        /**
         * 计费重量（必填，单位：克）
         */
        private Long weight;

        /**
         * 实重重量（必填，单位：克）
         */
        private Long actualWeight;

        /**
         * 集运方式（必填）
         * <p>FAST：快捷；NORMAL：标准；ROAD：集运陆运；SEA：集运海运；AIR：集运空运</p>
         */
        private String consoType;

        /**
         * 实际货品类型（非必填，与创建接口保持一致，有下发则回传）
         */
        private String goodsType;
    }


    /**
     * 实操结果信息
     */
    @Data
    public static class Result {
        /**
         * 实操结果code（必填）
         * <p>0-处理成功；其他code-问题件异常上报（详见附录五）</p>
         */
        private Integer code;

        /**
         * 实操结果描述（非必填，code≠0时必填）
         */
        private String desc;

        /**
         * 结果信息描述（非必填，code≠0时必填）
         */
        private String remark;
    }


}
