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

import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ta.pddserver.model.pddjy.request.JYBaseRequestModel;

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

@EqualsAndHashCode(callSuper = true)
@Data
public class PddServiceConsoPackOrderQueryResponse extends JYBaseRequestModel implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * 集运合包单详情（非必填）
     */
    private ConsoPackOrderInfo consoPackOrderInfo;


    /**
     * 集运合包单核心信息
     */
    @Data
    public static class ConsoPackOrderInfo {
        /**
         * 服务商code（必填）
         */
        private String providerCode;

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

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

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

        /**
         * 派送段（必填，固定为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 ReceiverDetail receiverDetail;

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

        /**
         * 合包单状态信息（必填）
         * <p>received：已接收未拣货；start_pick：开始拣货；finish_pick：拣货完成</p>
         * <p>has_outbound：出库完成；cancel：合包单已取消</p>
         */
        private String orderStatus;

        /**
         * 合包单对应的一段运单号列表（必填，关联包裹需全部返回）
         */
        private List<MailDetail> firstMailDetails;

        /**
         * 合包单对应的二段运单号（非必填，未出库时为空）
         */
        private SecondMailDetail secondMailDetail;

        /**
         * 拓展字段（非必填，JSON格式字符串，如{"key1":"value1","key2":"value2"}）
         */
        private String attributes;


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

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

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

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

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

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

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


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

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

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

            /**
             * 运费金额（必填）
             */
            private String freightPrice;

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

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

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

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


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

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


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

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


        /**
         * 二段运单详情
         */
        @Data
        public static class SecondMailDetail {
            /**
             * 快递公司编号（必填，二段运单存在时）
             */
            private String expressCode;

            /**
             * 运单号（必填，二段运单存在时）
             */
            private String mailNo;
        }
    }

}
