package com.sckw.contract.api.model.dto.res;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @author czh
 * @desc 贸易合同
 * @date 2023/7/19
 */
@Data
public class ContractDetailRespVo implements Serializable {

    @Serial
    private static final long serialVersionUID = -3838851258036291498L;

    /**
     * 合同id 修改时必传
     */
    @Schema(description = "合同id")
    private Long id;

    /**
     * 父合同ID 补充合同
     */
    @Schema(description = "父合同ID")
    private Long pid;

    /**
     * 基础信息
     */
    @Schema(description = "基础信息")
    private TradeBaseInfo baseInfo;

    /**
     * 合同文件
     */
    @Schema(description = "合同文件")
    private String contractFile;

    /**
     * 标的信息
     */
    @Schema(description = "标的信息")
    private List<TradeGoodsInfo> goodsInfo;

//    @Schema(description = "关联贸易订单")
//    private AssociatedOrder associatedOrder;

    /**
     * 备注
     */
    @Schema(description = "备注")
    private String remark;
    @Data
    public static class TradeBaseInfo implements Serializable{

        @Serial
        private static final long serialVersionUID = -5828478625710244673L;

        /**
         * 采购单位id
         */
        @Schema(description = "采购单位id")
        private Long purchaseEntId;
        /**
         * 采购单位名称
         */
        @Schema(description = "采购单位名称")
        private String purchaseFirmName;

        /**
         * 采购单位联系电话
         */
        @Schema(description = "采购单位联系电话")
        private String purchasePhone;

        /**
         * 供应单位id
         */
        @NotNull(message = "供应单位不能为空")
        private Long provideEntId;
        /**
         * 供应单位名称
         */
        @Schema(description = "供应单位名称")
        private String provideFirmName;

        /**
         * 供应单位联系电话
         */
        @Schema(description = "供应单位联系电话")
        private String providePhone;

        /**
         * 合同编号
         */
        @Schema(description = "合同编号")
        private String contractCode;

        /**
         * 合同名称
         */
        @Schema(description = "合同名称")
        private String contractName;
        /**
         * 合同状态
         */
        @Schema(description = "合同状态")
        private String contractStatus;
        /**
         * 合同状态描述
         */
        @Schema(description = "合同状态描述")
        private String contractStatusDesc;

        /**
         * 终止时间
         */
        @DateTimeFormat(pattern = "yyyy-MM-dd")
        @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
        @Schema(description = "终止时间")
        private Date endTime;

        /**
         * 签约方式（1线上签约、2线下签约）
         */
        @Schema(description = "签约方式")
        private Integer signingWay;
        /**
         * 签约方式描述
         */
        @Schema(description = "签约方式描述")
        private String signingWayDesc;

        /**
         * 生效时间
         */
        @DateTimeFormat(pattern = "yyyy-MM-dd")
        @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
        @Schema(description = "生效时间")
        private Date startTime;

        /**
         * 结算方式 1-普通结算 2-预付制结算
         */
        @Schema(description = "结算方式")
        private Integer settlement;
        /**
         * 结算方式描述
         */
        @Schema(description = "结算方式描述")
        private String settlementDesc;

        /**
         * 派车方式
         */
        @Schema(description = "派车方式 1-手动派车,2-自动派车")
        private Integer dispatchWay;
        /**
         * 派车方式描述
         */
        @Schema(description = "派车方式描述")
        private String dispatchWayDesc;

        /**
         * 托运方式
         */
        @Schema(description = "托运方式")
        private Integer consignment;
        /**
         * 托运方式描述
         */
        @Schema(description = "托运方式描述")
        private String consignmentDesc;
        /**
         * 卸货方式
         */
        @Schema(description = "卸货方式")
        private Integer unloadWay;
        /**
         * 卸货方式描述
         */
        @Schema(description = "卸货方式描述")
        private String unloadWayDesc;
        /**
         * 销售人员id
         */
        @Schema(description = "销售人员id")
        private Long salesmanId;
        /**
         * 销售联系电话
         */
        @Schema(description = "销售联系电话")
        private String salesmanPhone;
    }
    @Data
    public static class TradeGoodsInfo implements Serializable{
        @Serial
        private static final long serialVersionUID = -7003603561892852639L;

        /**
         * 商品id
         */
        @Schema(description = "商品id")
        private Long goodsId;
        /**
         * 商品名称
         */
        @Schema(description = "商品名称")
        private String goodsName;

        /**
         * 采购数量
         */
        @Schema(description = "采购数量")
        private BigDecimal amount;

        /**
         * 单价
         */
        @Schema(description = "单价")
        private BigDecimal price;

        /**
         * 单位
         */
        @Schema(description = "单位")
        private String unit;
        /**
         * 生效时间
         */
        @Schema(description = "生效开始时间")
        private Date effectiveStartTime;
        /**
         * 生效时间
         */
        @Schema(description = "生效结束时间")
        private Date effectiveEntTime;
    }
//    @Data
//    public static class AssociatedOrder implements Serializable{
//        @Serial
//        private static final long serialVersionUID = 3157352506945080734L;
//        /**
//         * 订单id
//         */
//        @Schema(description = "订单id")
//        private Long orderId;
//        /**
//         * 订单状态
//         */
//        @Schema(description = "订单状态")
//        private Integer orderStatus;
//        /**
//         * 订单编号
//         */
//        @Schema(description = "订单编号")
//        private String orderCode;
//        /**
//         * 采购单位id
//         */
//        @Schema(description = "采购单位id")
//        private Long purchaseEntId;
//        /**
//         * 采购单位名称
//         */
//        @Schema(description = "采购单位名称")
//        private String purchaseEntName;
//        /**
//         * 供应单位id
//         */
//        @Schema(description = "供应单位id")
//        private Long provideEntId;
//        /**
//         * 供应单位名称
//         */
//        @Schema(description = "供应单位名称")
//        private String provideEntName;
//        /**
//         * 运输单位id
//         */
//        @Schema(description = "运输单位id")
//        private Long transportEntId;
//        /**
//         * 运输单位名称
//         */
//        @Schema(description = "运输单位名称")
//        private String transportEntName;
//        /**
//         * 商品id
//         */
//        @Schema(description = "商品id")
//        private Long goodsId;
//        /**
//         * 商品名称
//         */
//        @Schema(description = "商品名称")
//        private String goodsName;
//        /**
//         * 计费方式
//         */
//        @Schema(description = "计费方式")
//        private Integer billingWay;
//        /**
//         * 计费方式描述
//         */
//        @Schema(description = "计费方式描述")
//        private String billingWayDesc;
//        /**
//         * 下单量
//         */
//        @Schema(description = "下单量")
//        private String amount;
//        /**
//         * 累计装货量
//         */
//        @Schema(description = "累计装货量")
//        private String loadAmount;
//        /**
//         * 累计卸货量
//         */
//        @Schema(description = "累计卸货量")
//        private String unloadAmount;
//        /**
//         * 运输单价
//         */
//        private String transportPrice;
//        /**
//         * 装货地址
//         */
//        @Schema(description = "装货地址")
//        private String loadAddress;
//        /**
//         * 卸货地址
//         */
//        @Schema(description = "卸货地址")
//        private String unloadAddress;
//    }
}
