package com.tourism.webadmin.back.model;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.tourism.common.core.annotation.RelationGlobalDict;
import com.tourism.common.core.annotation.RelationOneToOne;
import com.tourism.common.core.base.model.BaseModel;
import com.tourism.common.core.util.MyCommonUtil;
import lombok.Data;
import lombok.EqualsAndHashCode;

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

/**
 * 旅游订单实体对象。
 *
 * @author 吃饭睡觉
 * @date 2024-09-06
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "tour_order")
public class TourOrder extends BaseModel {

    /**
     * ID主键。
     */
    @TableId(value = "id")
    private Long id;

    /**
     * 订单号。
     */
    @TableField(value = "order_no")
    private String orderNo;

    /**
     * 出发日期。
     */
    @TableField(value = "departure_date")
    private Date departureDate;

    /**
     * 结束日期。
     */
    @TableField(value = "end_date")
    private Date endDate;

    /**
     * 成人数量。
     */
    @TableField(value = "adult_number")
    private Integer adultNumber;

    /**
     * 儿童数量。
     */
    @TableField(value = "children_number")
    private Integer childrenNumber;

    /**
     * 币种。
     */
    @TableField(value = "currency")
    private String currency;

    /**
     * 订单总金额。
     */
    @TableField(value = "total_amount")
    private BigDecimal totalAmount;

    /**
     * 房间数量。
     */
    @TableField(value = "room_number")
    private Integer roomNumber;

    /**
     * 车辆信息。
     */
    @TableField(value = "car_id")
    private Long carId;

    /**
     * 车辆金额。
     */
    @TableField(value = "car_amount")
    private BigDecimal carAmount;

    /**
     * 儿童价格。
     */
    @TableField(value = "children_price")
    private BigDecimal childrenPrice;

    /**
     * 成人价格。
     */
    @TableField(value = "adult_price")
    private BigDecimal adultPrice;

    /**
     * 总天数。
     */
    @TableField(value = "count_times")
    private String countTimes;

    /**
     * 预定日期。
     */
    @TableField(value = "order_date")
    private Date orderDate;

    /**
     * 订单状态。(2,未确认;0,未完成;1,已完成)
     */
    @TableField(value = "order_status")
    private Integer orderStatus;

    /**
     * 旅游项目。
     */
    @TableField(value = "project_id")
    private String projectId;

    /**
     * 项目简述。
     */
    @TableField(value = "project_resume")
    private String projectResume;

    /**
     * 项目标题。
     */
    @TableField(value = "project_title")
    private String projectTitle;

    /**
     * 顾客姓名。
     */
    @TableField(value = "customer_name")
    private String customerName;

    /**
     * 顾客手机号。
     */
    @TableField(value = "customer_mobile")
    private String customerMobile;

    /**
     * 顾客微信号。
     */
    @TableField(value = "customer_wechat")
    private String customerWechat;

    /**
     * 顾客备用手机号。
     */
    @TableField(value = "customer_mobile_standby")
    private String customerMobileStandby;

//    /**
//     * whatsapp账号。
//     */
//    @TableField(value = "whatsapp")
//    private String whatsapp;

    /**
     * 逻辑删除标记字段(1: 正常 -1: 已删除)。
     */
    @TableLogic
    @TableField(value = "data_state")
    private Integer dataState;

    /**
     * 团购id
     */
    @TableField(value = "group_purchase_progress_id")
    private Long groupPurchaseProgressId;

    /**
     * 订单的类型(0.普通订单;1.拼团的订单)
     */
    @TableField(value = "type")
    private Integer type;

    /**
     * departureDate 范围过滤起始值(>=)。
     */
    @TableField(exist = false)
    private String departureDateStart;

    /**
     * departureDate 范围过滤结束值(<=)。
     */
    @TableField(exist = false)
    private String departureDateEnd;

    /**
     * endDate 范围过滤起始值(>=)。
     */
    @TableField(exist = false)
    private String endDateStart;

    /**
     * endDate 范围过滤结束值(<=)。
     */
    @TableField(exist = false)
    private String endDateEnd;

    /**
     * project_resume / customer_name / customer_mobile LIKE搜索字符串。
     */
    @TableField(exist = false)
    private String searchString;

    public void setSearchString(String searchString) {
        this.searchString = MyCommonUtil.replaceSqlWildcard(searchString);
    }

    @RelationOneToOne(
            masterIdField = "projectId",
            slaveModelClass = TourismProject.class,
            slaveIdField = "id")
    @TableField(exist = false)
    private TourismProject tourismProject;

    @RelationGlobalDict(
            masterIdField = "orderStatus",
            dictCode = "OrderStatus")
    @TableField(exist = false)
    private Map<String, Object> orderStatusDictMap;


    @RelationOneToOne(
            masterIdField = "groupPurchaseProgressId",
            slaveModelClass = TourProjectGroupPurchase.class,
            slaveIdField = "id")
    @TableField(exist = false)
    private TourProjectGroupPurchase tourProjectGroupPurchase;
}
