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 PddServiceConsoFeeQueryRequest extends JYBaseRequestModel implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * 服务商code（必填）
     */
    private String providerCode;

    /**
     * 集运仓code（必填）
     */
    private String consoWarehouseCode;

    /**
     * 合包单号（非必填，拆包场景且segmentCode=SENDTORECEVER时必填）
     */
    private String logisticsPackOrderCode;

    /**
     * 集运单号列表（必填）
     */
    private List<LogisticsOrderCode> logisticsOrderCodes;

    /**
     * 业务类型（必填，固定为CONSO-集运）
     */
    private String bizType;

    /**
     * 计费包裹类型（非必填，默认普通件不传；SMALL：小件；BIG：大件）
     */
    private String freightPackageType;

    /**
     * 商品类型（非必填，NORMAL-普货；SPECIAL-特货）
     */
    private String goodsType;

    /**
     * 派送段（必填，RETURNSELLER-退回卖家；SENDTORECEVER-送往收货人）
     */
    private String segmentCode;

    /**
     * 集运方式（非必填，ROAD：陆运；SEA：海运；AIR：空运，segmentCode=SENDTORECEVER时必填）
     */
    private String consoType;

    /**
     * 派送类型（非必填，selfSite：自提点；selfCabinet：自提柜；homeDelivery：宅配，segmentCode=SENDTORECEVER时必填）
     */
    private String deliveryType;

    /**
     * 运单详情列表（必填，本次计费包裹的运单号列表）
     */
    private List<MailDetail> mailDetails;

    /**
     * 收货人详情（必填）
     */
    private ReceiverDetail receiverDetail;


    /**
     * 集运单号列表项
     */
    @Data
    public static class LogisticsOrderCode {
        /**
         * 集运单号（必填）
         */
        private String logisticsOrderCode;
    }


    /**
     * 运单详情
     */
    @Data
    public static class MailDetail {
        /**
         * 快递公司编号（必填）
         */
        private String expressCode;

        /**
         * 运单号（必填）
         */
        private String mailNo;
    }


    /**
     * 收货人详情
     */
    @Data
    public static class ReceiverDetail {
        /**
         * 地区/国家（必填）
         */
        private String country;

        /**
         * 省（必填）
         */
        private String province;

        /**
         * 市（必填）
         */
        private String city;

        /**
         * 区（必填）
         */
        private String district;

        /**
         * 详细地址（非必填）
         */
        private String detailAddress;

        /**
         * 邮编（非必填）
         */
        private String postCode;
    }
}
