package cn.iocoder.yudao.module.system.controller.admin.reservation.vo;

import cn.iocoder.yudao.module.system.dal.dataobject.reservation.ReservationDepositPayDO;
import cn.iocoder.yudao.module.system.dal.dataobject.reservation.ReservationDepositRefundDO;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;

import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;

@Schema(description = "管理后台 - 长者预约床位 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ReservationBedRespVO {

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

    @Schema(description = "长者名称", example = "张三")
    @ExcelProperty("长者名称")
    private String elderName;

    @Schema(description = "长者性别")
    @ExcelProperty("长者性别")
    private Integer elderSex;

    @Schema(description = "出生日期")
    @ExcelProperty("出生日期")
    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY)
    private LocalDate birthday;

    @Schema(description = "年龄")
    @ExcelProperty("年龄")
    private Integer age;

    @Schema(description = "证件类型", example = "1")
    @ExcelProperty("证件类型")
    private Integer idType;

    @Schema(description = "证件号码")
    @ExcelProperty("证件号码")
    private String idNumber;

    @Schema(description = "证件地址")
    @ExcelProperty("证件地址")
    private String certificateAddress;

    @Schema(description = "居住地址")
    @ExcelProperty("居住地址")
    private String address;

    @Schema(description = "托养人姓名", example = "王五")
    @ExcelProperty("托养人姓名")
    private String relativeName;

    @Schema(description = "托养人手机号")
    @ExcelProperty("托养人手机号")
    private String relativePhone;

    @Schema(description = "关系")
    @ExcelProperty("关系")
    private Integer relation;

    @Schema(description = "预约入住时间")
    @ExcelProperty("预约入住时间")
    @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY)
    private LocalDateTime reservationCheckInTime;

    @Schema(description = "床位ID", example = "28295")
    @ExcelProperty("床位ID")
    private Long bedId;

    @Schema(description = "销售人员")
    @ExcelProperty("销售人员")
    private String salesperson;

    @Schema(description = "来源渠道")
    @ExcelProperty("来源渠道")
    private Integer sourceChannel;

    @Schema(description = "预约说明")
    @ExcelProperty("预约说明")
    private String instructions;

    @Schema(description = "状态，0：待缴费 1：预约成功 2：预约失败 3：已关闭  4：已入住", example = "1")
    @ExcelProperty("状态，0：待缴费 1：预约成功 2：预约失败 3：已关闭  4：已入住")
    private Integer status;

    @Schema(description = "预约目的")
    private String purposeType;

    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("创建时间")
    private LocalDateTime createTime;

    @Schema(description = "系统类型", example = "2")
    @ExcelProperty("系统类型")
    private Integer orgType;

    @Schema(description = "床位名称")
    private String fullBedName;

    @Schema(description = "缴费状态，0：未缴费 1：已缴费", example = "1")
    @ExcelProperty("缴费状态，0：未缴费 1：已缴费")
    private Integer payStatus;

    @Schema(description = "缴费时间")
    @ExcelProperty("缴费时间")
    private LocalDateTime payTime;

    @Schema(description = "收款人姓名", example = "李四")
    @ExcelProperty("收款人姓名")
    private String payeeName;

    @Schema(description = "支付信息列表")
    private List<ReservationDepositPayDO>  payInfo;

    @Schema(description = "押金金额")
    private BigDecimal depositAmount;

    @Schema(description = "退款记录")
    private List<ReservationDepositRefundDO> refundInfo;

    private String tenantName;

    private Long tenantId;

}