package com.ylx.order.domain.vo;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

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

@Data
public class AdminOrderDetailVO {

    /**
     * 订单基础信息。
     */
    @ApiModelProperty("订单信息")
    private OrderInfoVO orderInfo;

    /**
     * 订单关联的项目信息。
     */
    @ApiModelProperty("项目信息")
    private ProjectInfoVO projectInfo;

    /**
     * 服务凭证图片列表。
     */
    @ApiModelProperty("服务凭证图片")
    private List<String> serviceVoucherList;

    /**
     * 订单操作日志列表。
     */
    @ApiModelProperty("订单操作日志")
    private List<OperationLogVO> operationLogList;

    /**
     * 订单信息。
     */
    @Data
    public static class OrderInfoVO {
        /**
         * 订单ID。
         */
        @ApiModelProperty("订单ID")
        private Long id;

        /**
         * 订单号。
         */
        @ApiModelProperty("订单号")
        private String orderNo;

        /**
         * 订单状态编码。
         */
        @ApiModelProperty("订单状态")
        private Integer status;

        /**
         * 订单状态名称。
         */
        @ApiModelProperty("订单状态名称")
        private String statusName;

        /**
         * 下单用户昵称。
         */
        @ApiModelProperty("下单用户")
        private String userNickName;

        /**
         * 联系人姓名。
         */
        @ApiModelProperty("联系人")
        private String contactPersonName;

        /**
         * 联系人电话。
         */
        @ApiModelProperty("联系电话")
        private String contactPhoneNumber;

        /**
         * 联系地址信息。
         */
        @ApiModelProperty("联系地址")
        private String contactAddressInfo;

        /**
         * 商户昵称。
         */
        @ApiModelProperty("商户昵称")
        private String merchantNickName;

        /**
         * 商户联系电话。
         */
        @ApiModelProperty("商户电话")
        private String merchantPhone;

        /**
         * 预约开始时间。
         */
        @ApiModelProperty("预约开始时间")
        private String appointmentStartTime;

        /**
         * 服务开始时间。
         */
        @ApiModelProperty("服务开始时间")
        private String startTime;

        /**
         * 服务结束时间。
         */
        @ApiModelProperty("服务结束时间")
        private String completedTime;

        /**
         * 下单时间。
         */
        @ApiModelProperty("下单时间")
        private String createTime;

        /**
         * 付款时间。
         */
        @ApiModelProperty("付款时间")
        private String paidTime;

        /**
         * 付款方式编码。
         */
        @ApiModelProperty("付款方式")
        private Integer paymentMethod;

        /**
         * 付款方式名称。
         */
        @ApiModelProperty("付款方式名称")
        private String paymentMethodName;

        /**
         * 项目服务时长。
         */
        @ApiModelProperty("项目时长")
        private Integer projectDuration;

        /**
         * 用户纬度。
         */
        @ApiModelProperty("用户纬度")
        private BigDecimal userLatitude;

        /**
         * 用户经度。
         */
        @ApiModelProperty("用户经度")
        private BigDecimal userLongitude;

        /**
         * 商户真实纬度。
         */
        @ApiModelProperty("商户真实纬度")
        private BigDecimal merchantLatitude;

        /**
         * 商户真实经度。
         */
        @ApiModelProperty("商户真实经度")
        private BigDecimal merchantLongitude;

        /**
         * 商户虚拟纬度。
         */
        @ApiModelProperty("商户虚拟纬度")
        private BigDecimal virtualLatitude;

        /**
         * 商户虚拟经度。
         */
        @ApiModelProperty("商户虚拟经度")
        private BigDecimal virtualLongitude;

        /**
         * 用户与商户之间的距离。
         */
        @ApiModelProperty("距离")
        private BigDecimal distance;

        /**
         * 服务凭证图片原始字段。
         */
        @ApiModelProperty("服务凭证原始字段")
        private String startPhoto;

        /**
         * 最新售后单ID。
         */
        @ApiModelProperty("售后单ID")
        private Long afterSalesServiceId;

        /**
         * 售后状态编码。
         */
        @ApiModelProperty("售后状态")
        private Integer afterSalesServiceStatus;

        /**
         * 售后状态名称。
         */
        @ApiModelProperty("售后状态名称")
        private String afterSalesServiceStatusName;

        /**
         * 平台收益金额。
         */
        @ApiModelProperty("平台收益")
        private BigDecimal platformIncome;

        /**
         * 商户收益金额。
         */
        @ApiModelProperty("商户收益")
        private BigDecimal merchantIncome;
    }

    @Data
    public static class ProjectInfoVO {
        /**
         * 项目名称。
         */
        @ApiModelProperty("项目名称")
        private String projectName;

        /**
         * 项目封面图片地址。
         */
        @ApiModelProperty("项目封面")
        private String projectCover;

        /**
         * 项目标准服务时长。
         */
        @ApiModelProperty("标准时长")
        private Integer standardDuration;

        /**
         * 计费单位编码，0-分钟，1-小时，2-次。
         */
        @ApiModelProperty("计费单位")
        private Integer unitType;

        /**
         * 计费单位名称。
         */
        @ApiModelProperty("计费单位名称")
        private String unitName;

        /**
         * 项目售价。
         */
        @ApiModelProperty("售价")
        private BigDecimal unitPrice;

        /**
         * 商户佣金比例。
         */
        @ApiModelProperty("商户佣金比例")
        private BigDecimal merchantCommission;

        /**
         * 订单实付金额。
         */
        @ApiModelProperty("实付金额")
        private BigDecimal finalAmount;

        /**
         * 订单应收金额。
         */
        @ApiModelProperty("订单应收")
        private BigDecimal basePrice;

        /**
         * 出行车费。
         */
        @ApiModelProperty("出行车费")
        private BigDecimal trafficFee;

        /**
         * 优惠券抵扣金额。
         */
        @ApiModelProperty("优惠券抵扣")
        private BigDecimal couponDiscount;

        /**
         * 最新售后单ID。
         */
        @ApiModelProperty("售后单ID")
        private Long afterSalesServiceId;

        /**
         * 售后状态编码。
         */
        /*@ApiModelProperty("售后状态")
        private Integer afterSalesServiceStatus;*/

        /**
         * 售后状态名称。
         */
        /*@ApiModelProperty("售后状态名称")
        private String afterSalesServiceStatusName;*/
    }

    /**
     * 订单操作日志
     */
    @Data
    public static class OperationLogVO {
        /**
         * 操作人。
         */
        @ApiModelProperty("操作人")
        private String operator;

        /**
         * 操作时间。
         */
        @ApiModelProperty("操作时间")
        private String operationTime;

        /**
         * 操作后的订单状态编码。
         */
        @ApiModelProperty("状态")
        private Integer status;

        /**
         * 操作后的订单状态名称。
         */
        @ApiModelProperty("状态名称")
        private String statusName;

        /**
         * 操作内容描述。
         */
        @ApiModelProperty("操作内容")
        private String operationContent;
    }
}
