package com.yc.ship.module.trade.controller.admin.order.vo.order;

import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yc.ship.framework.excel.core.annotations.DictFormat;
import com.yc.ship.framework.excel.core.convert.DictConvert;
import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageRespVO;
import com.yc.ship.module.resource.dal.dataobject.route.ResourceRouteDO;
import com.yc.ship.module.trade.dal.dataobject.contract.ContractDO;
import com.yc.ship.module.trade.dal.dataobject.insurance.InsuranceDO;
import com.yc.ship.module.trade.dal.dataobject.order.TradeVisitorDO;
import com.yc.ship.module.trade.dal.dataobject.orderjz.OrderJzDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

import static com.yc.ship.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
import static com.yc.ship.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;

/**
 * 订单确认信息
 * @author yucheng
 * @date 2021/8/13 21:05
 */
@Data
public class TradeOrderConfirmationVO {


    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "10096")
    private Long id;

    @Schema(description = "订单号")
    @ExcelProperty("订单号")
    private String orderNo;

    @Schema(description = "团号")
    @ExcelProperty("团号")
    private String groupNo;

    @Schema(description = "联系人")
    @ExcelProperty("联系人")
    private String linkMan;

    @Schema(description = "联系人手机号")
    @ExcelProperty("联系人手机号")
    private String linkMobile;

    @Schema(description = "订单状态", example = "1")
    private Integer orderStatus;

    @Schema(description = "支付状态", example = "1")
    private Integer payStatus;

    @Schema(description = "支付方式", example = "2")
    @ExcelProperty(value = "支付方式", converter = DictConvert.class)
    @DictFormat("payment_type")
    private Integer paymentType;

    @Schema(description = "支付方式", example = "2")
    private String paymentTypeName;

    @Schema(description = "支付时间")
//    @ExcelProperty("支付时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
    private LocalDateTime paymentDate;

    @Schema(description = "备注")
    @ExcelProperty("备注")
    private String remark;

    @Schema(description = "销售来源", example = "31758")
    private String sourceId;

    @Schema(description = "来源名称", example = "张三")
    @ExcelProperty("来源名称")
    private String sourceName;

    @Schema(description = "入住房型国籍信息")
    private List<TradeOrderConfirmationCountryRespVO> countryList;

    @Schema(description = "人员数据统计")
    private String personStat;

    @Schema(description = "国籍数量描述")
    private String countryDesc;

    @Schema(description = "使用房型数量描述")
    private String useRoomTotalDesc;

    @Schema(description = "订单汇总信息")
    private TradeOrderTotalVO summary;

    @Schema(description = "游轮ID")
    private Long shipId;

    @Schema(description = "游轮名称")
    private String shipName;

    @Schema(description = "游轮英文名称")
    private String shipNameEn;

    @Schema(description = "航次ID")
    private Long voyageId;

    @Schema(description = "游轮航次信息")
    private VoyageRespVO voyage;
    private ResourceRouteDO resourceRouteDO;

    @Schema(description = "创建者")
    private Long creator;

    @Schema(description = "创建者名称")
    private String creatorName;

    @Schema(description = "审核者")
    private String auditorName;

    /**
     * 订单金额
     */
    private BigDecimal amount;
    /**
     * 支付金额
     */
    private BigDecimal payAmount;

    @Schema(description = "创建时间")
    private LocalDateTime createTime;

    @Schema(description = "更新时间")
    private LocalDateTime updateTime;

    @Schema(description = "联系人姓名")
    @ExcelProperty("联系人姓名")
    private String contactName;

    @Schema(description = "手机号")
    @ExcelProperty("手机号")
    private String mobile;

    @Schema(description = "门店ID")
    private Long storeId;

    @Schema(description = "门店名称")
    @ExcelProperty("门店名称")
    private String storeName;

    @Schema(description = "开票标识:0-未开票，1-开票成功，2-开票失败，3-已开票")
    private Integer isInvoice;

    @Schema(description = "发票下载")
    private String invoiceUrl;

    @Schema(description = "保险")
    private List<InsuranceDO> insuranceList;

    @Schema(description = "合同")
    private List<ContractDO> contractList;

    @Schema(description = "附件产品数据")
    private List<TradeOrderDetailCountRespVO> spuList;

    @Schema(description = "游客信息")
    private List<TradeVisitorDO> tradeVisitorList;

    @Schema(description = "接站信息")
    private OrderJzDO orderJz;

}
