package com.tourism.webadmin.back.dto;

import com.baomidou.mybatisplus.annotation.TableField;
import com.tourism.common.core.validator.AddGroup;
import com.tourism.common.core.validator.UpdateGroup;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import jakarta.validation.constraints.*;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 旅游订单Dto对象。
 *
 * @author 吃饭睡觉
 * @date 2024-09-06
 */
@Schema(description = "TourOrderDto对象")
@Data
public class TourOrderDto {

    /**
     * ID主键。
     */
    @Schema(description = "ID主键。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "数据验证失败，ID主键不能为空！", groups = {UpdateGroup.class})
    private Long id;

    /**
     * 订单号。
     */
    @Schema(description = "订单号。")
    private String orderNo;

    /**
     * 出发日期。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "出发日期。可支持等于操作符的列表数据过滤。")
    @NotNull(message = "数据验证失败，出发日期不能为空！", groups = {AddGroup.class})
    private Date departureDate;

    /**
     * 结束日期。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "结束日期。可支持等于操作符的列表数据过滤。")
    private Date endDate;

    /**
     * 成人数量。
     */
    @Schema(description = "成人数量。")
//    @NotNull(message = "数据验证失败，成人数量不能为空！", groups = {AddGroup.class})
    private Integer adultNumber;

    /**
     * 儿童数量。
     */
    @Schema(description = "儿童数量。")
//    @NotNull(message = "数据验证失败，儿童数量不能为空！", groups = {AddGroup.class})
    private Integer childrenNumber;

    /**
     * 币种。
     */
    @Schema(description = "币种。")
    private String currency;

    /**
     * 订单总金额。
     */
    @Schema(description = "订单总金额。")
    private BigDecimal totalAmount;

    /**
     * 房间数量。
     */
    @Schema(description = "房间数量。")
    private Integer roomNumber;

    /**
     * 车辆信息。
     */
    @Schema(description = "车辆信息。")
    private Long carId;

    /**
     * 车辆金额。
     */
    @Schema(description = "车辆金额。")
    private BigDecimal carAmount;

    /**
     * 预定日期。
     */
    @Schema(description = "预定日期。")
    private Date orderDate;

    /**
     * 订单状态。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "订单状态。可支持等于操作符的列表数据过滤。")
    private Integer orderStatus;

    /**
     * 旅游项目。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "旅游项目。可支持等于操作符的列表数据过滤。")
//    @NotNull(message = "数据验证失败，旅游项目不能为空！", groups = {AddGroup.class})
    private Long projectId;

    /**
     * 项目简述。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "项目简述。可支持等于操作符的列表数据过滤。")
    private String projectResume;

    /**
     * 顾客姓名。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "顾客姓名。可支持等于操作符的列表数据过滤。")
    private String customerName;

    /**
     * 顾客手机号。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "顾客手机号。可支持等于操作符的列表数据过滤。")
//    @NotEmpty(message = "数据验证失败，顾客手机号不能为空！", groups = {UpdateGroup.class})
    private String customerMobile;

    /**
     * 顾客微信号。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "顾客微信号。可支持等于操作符的列表数据过滤。")
//    @NotEmpty(message = "数据验证失败，顾客微信号不能为空！", groups = {UpdateGroup.class})
    private String customerWechat;

    /**
     * 顾客备用手机号。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "顾客备用手机号。可支持等于操作符的列表数据过滤。")
    private String customerMobileStandby;

//    /**
//     * whatsapp账号。
//     * NOTE: 可支持等于操作符的列表数据过滤。
//     */
//    @Schema(description = "whatsapp账号。可支持等于操作符的列表数据过滤。")
//    private String whatsapp;


    /**
     * 儿童价格。
     */
    @Schema(description = "儿童价格。可支持等于操作符的列表数据过滤。")
    private BigDecimal childrenPrice;

    /**
     * 成人价格。
     */
    @Schema(description = "成人价格。可支持等于操作符的列表数据过滤。")
    private BigDecimal adultPrice;

    /**
     * 总天数。
     */
    @Schema(description = "总天数。可支持等于操作符的列表数据过滤。")
    private String countTimes;

    /**
     * 项目标题。
     */
    @Schema(description = "项目标题。可支持等于操作符的列表数据过滤。")
    private String projectTitle;

    /**
     * departureDate 范围过滤起始值(>=)。
     * NOTE: 可支持范围操作符的列表数据过滤。
     */
    @Schema(description = "departureDate 范围过滤起始值(>=)。可支持范围操作符的列表数据过滤。")
    private String departureDateStart;

    /**
     * departureDate 范围过滤结束值(<=)。
     * NOTE: 可支持范围操作符的列表数据过滤。
     */
    @Schema(description = "departureDate 范围过滤结束值(<=)。可支持范围操作符的列表数据过滤。")
    private String departureDateEnd;

    /**
     * endDate 范围过滤起始值(>=)。
     * NOTE: 可支持范围操作符的列表数据过滤。
     */
    @Schema(description = "endDate 范围过滤起始值(>=)。可支持范围操作符的列表数据过滤。")
    private String endDateStart;

    /**
     * endDate 范围过滤结束值(<=)。
     * NOTE: 可支持范围操作符的列表数据过滤。
     */
    @Schema(description = "endDate 范围过滤结束值(<=)。可支持范围操作符的列表数据过滤。")
    private String endDateEnd;

    /**
     * project_resume / customer_name / customer_mobile LIKE搜索字符串。
     * NOTE: 可支持LIKE操作符的列表数据过滤。
     */
    @Schema(description = "LIKE模糊搜索字符串")
    private String searchString;

    @Schema(description = "团购ID")
    private Long groupPurchaseProgressId;

    @Schema(description = "订单类型(0.普通订单;1.拼团的订单)")
    private Integer type;
}
