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 PddServiceConsoOutboundNoticeRequest extends JYBaseRequestModel implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;

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

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

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

    /**
     * 用户识别码（必填）
     */
    private String buyerCode;

    /**
     * 集运单号列表（合包中包含的集运单，非必填）
     */
    private List<String> logisticsOrderCodes;

    /**
     * 一段订单号列表（合包中包含的订单，非必填）
     */
    private List<String> orderSns;

    /**
     * 一段订单详情列表（非必填）
     */
    private List<OrderDetail> orderDetails;

    /**
     * 订单支付总金额（默认人民币，单位：分，非必填）
     */
    private Long tradeOrderActualAmountTotal;

    /**
     * 商品总数量（合包中包含一段订单的累计商品数量，非必填）
     */
    private Integer itemQuantityTotal;

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

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

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

    /**
     * 自提点（柜）编码（非必填，deliveryType为selfSite或selfCabinet时必填）
     */
    private String stationCode;

    /**
     * 运单详情列表（必填）
     */
    private List<MailDetail> mailDetails;

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

    /**
     * 运费详情（必填）
     */
    private FreightFeeDetail freightFeeDetail;


    /**
     * 一段订单详情
     */
    @Data
    public static class OrderDetail {
        /**
         * 一段订单号（非必填）
         */
        private String orderSn;

        /**
         * 集运订单号（非必填）
         */
        private String logisticsOrderCode;

        /**
         * 商品ID（非必填）
         */
        private String itemId;

        /**
         * 商品名称（非必填）
         */
        private String itemName;

        /**
         * 类目id（非必填）
         */
        private Long categoryId;

        /**
         * 类目名称（非必填）
         */
        private String categoryName;

        /**
         * 商品数量（非必填）
         */
        private Integer itemQuantity;

        /**
         * 该订单下参与本次合包的包裹总重量（计费重，单位：克，非必填）
         */
        private Long weightTotal;

        /**
         * 订单支付金额（默认人民币，单位：分，非必填）
         */
        private Long actualAmount;

        /**
         * 品名（非必填）
         */
        private String productName;

        /**
         * 出口申报金额（消费者实付金额+平台优惠金额，默认人民币，单位：分，非必填。二次合包为0）
         */
        private Long exportDecAmount;

        /**
         * 生产销售主体（非必填）
         */
        private Manufacturer manufacturer;


        /**
         * 生产销售主体信息
         */
        @Data
        public static class Manufacturer {
            /**
             * 企业名称（非必填）
             */
            private String producerEnterpriseName;

            /**
             * 主体类型（非必填，企业店/个人店）
             */
            private String producerType;

            /**
             * 企业统一社会信用代码（非必填）
             */
            private String producerEnterpriseCode;
        }
    }


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

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

        /**
         * 包裹对应的仓库编码（非必填）
         */
        private String consoWarehouseCode;
    }


    /**
     * 收货人详情
     */
    @Data
    public static class ReceiverDetail {
        /**
         * 收件人姓名（必填）
         */
        private String name;

        /**
         * 收件人证件号码（非必填）
         */
        private String idNumber;

        /**
         * 手机号/固定电话（必填）
         */
        private String telePhone;

        /**
         * 地区/国家（必填）
         */
        private String country;

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

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

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

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

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


    /**
     * 运费详情
     */
    @Data
    public static class FreightFeeDetail {
        /**
         * 支付交易订单号（必填）
         */
        private String payOrderId;

        /**
         * 支付时间（必填）
         */
        private String payTime;

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

        /**
         * 运费金额（包含gst费用和仓租，必填）
         */
        private String freightPrice;

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

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

        /**
         * 货币单位（非必填，CENT：分）
         */
        private String currencyUnit;

        /**
         * 币种（非必填，CNY：人民币）
         */
        private String currency;

        /**
         * 申报金额（非必填，segmentCode=SENDTORECEVER时赋值）
         */
        private Long declareAmount;

        /**
         * 优惠总金额（非必填）
         */
        private String discountFee;

        /**
         * 优惠信息列表（非必填）
         */
        private List<DiscountDetail> discountDetails;

        /**
         * 费用详情列表（非必填，segmentCode=SENDTORECEVER时不为空；RETURNSELLER时不赋值）
         */
        private List<FeeDetail> feeDetails;


        /**
         * 优惠信息
         */
        @Data
        public static class DiscountDetail {
            /**
             * 优惠类型（非必填，如FIRST_WEIGHT_REDUCTION_SF2208-首重减免）
             */
            private String discountType;

            /**
             * 优惠金额（非必填）
             */
            private String discountFee;
        }


        /**
         * 费用详情
         */
        @Data
        public static class FeeDetail {
            /**
             * 场景（必填，枚举值：freight_fee-运费；rent_fee-仓租；gst-商品和服务税；remote_surcharge-偏远附加费；free_shipping_fee-包邮补贴；big_freight_extra_fee-大件附加费）
             */
            private String scene;

            /**
             * 费用类型（必填，同scene枚举值）
             */
            private String type;

            /**
             * 费用金额（必填）
             */
            private Long amount;

            /**
             * 货币单位（必填，CENT：分）
             */
            private String currencyUnit;

            /**
             * 币种（必填，CNY：人民币）
             */
            private String currency;
        }
    }
}
