package com.xinelu.manage.dto.consultationInfo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.xinelu.common.core.domain.BaseEntity;
import com.xinelu.common.custominterface.Insert;
import com.xinelu.common.custominterface.Update;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.time.LocalTime;
import java.util.Date;
import java.util.List;

/**
 * 在线问诊-问诊信息（图文和视频问诊基本信息）对象 consultation_info
 *
 * @author xinelu
 * @date 2023-09-25
 */
@EqualsAndHashCode(callSuper = true)
@ApiModel("在线问诊-问诊信息（图文和视频问诊基本信息）对象")
@Data
public class ConsultationInfoDTO extends BaseEntity implements Serializable {

    private static final long serialVersionUID = 84160236235012933L;

    /**
     * id
     */
    private Long id;
    /**
     * 患者id
     */
    @ApiModelProperty("患者id")
    @NotNull(message = "患者信息不能为空", groups = {Insert.class})
    private Long patientId;

    /**
     * 患者名称
     */
    @ApiModelProperty("患者姓名")
    private String patientName;

    /**
     * 患者身份证号
     */
    @ApiModelProperty("患者身份证号")
    @NotBlank(message = "患者身份证号不能为空", groups = {Insert.class, Update.class})
    @Length(max = 18, message = "身份证号不能超过18位", groups = {Insert.class, Update.class})
    private String cardNo;

    /**
     * 患者联系方式
     */
    @ApiModelProperty("患者联系方式")
    @NotBlank(message = "患者联系方式不能为空", groups = {Insert.class, Update.class})
    @Length(max = 11, message = "联系方式不能超过11位", groups = {Insert.class, Update.class})
    private String phone;

    /**
     * 现住址所在地区
     */
    @ApiModelProperty("现住址所在地区")
    @NotBlank(message = "患者信息不能为空", groups = {Insert.class, Update.class})
    @Length(max = 100, message = "现住址所在地区不能超过100位", groups = {Insert.class, Update.class})
    private String address;

    /**
     * 医生id(签约医生/专家)
     */
    @ApiModelProperty("医生id(签约医生/专家)")
    @NotBlank(message = "医生信息不能为空", groups = {Insert.class, Update.class})
    private String doctorId;

    /**
     * 医生名称
     */
    @ApiModelProperty("医生名称")
    private String doctorName;

    /**
     * 问诊类型，图文问诊：IMAGE_TEXT_CONSULTATION，视频问诊：VIDEO_CONSULTATION
     */
    @ApiModelProperty("问诊类型，图文问诊：IMAGE_TEXT_CONSULTATION，视频问诊：VIDEO_CONSULTATION")
    @NotBlank(message = "问诊类型不能为空", groups = {Insert.class, Update.class})
    private String consultationType;


    /**
     * 预约日期(视频问诊预约)，时间格式：yyyy-MM-dd
     */
    @ApiModelProperty("预约日期(视频问诊预约)，时间格式：yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date appointmentDate;

    /**
     * 预约开始时间点(视频问诊预约)，时间格式：HH:mm
     */
    @ApiModelProperty("预约开始时间点(视频问诊预约)，时间格式：HH:mm")
    @JsonFormat(pattern = "HH:mm")
    private LocalTime appointmentStartTime;

    /**
     * 预约结束时间点(视频问诊预约)，时间格式：HH:mm
     */
    @ApiModelProperty("预约结束时间点(视频问诊预约)，时间格式：HH:mm")
    @JsonFormat(pattern = "HH:mm")
    private LocalTime appointmentEndTime;

    /**
     * 视频问诊地址
     */
    @ApiModelProperty("视频问诊地址")
    private String videoUrl;

    /**
     * 问题简述
     */
    @ApiModelProperty("问题简述")
    @NotBlank(message = "问题简述不能为空", groups = {Insert.class, Update.class})
    @Length(max = 5, message = "问题简述不能超过5位", groups = {Insert.class, Update.class})
    private String problemDescription;

    /**
     * 患者个体情况说明
     */
    @ApiModelProperty("患者个体情况说明")
    @NotBlank(message = "患者个体情况说明不能为空", groups = {Insert.class, Update.class})
    @Length(max = 100, message = "患者个体情况说明不能超过100位", groups = {Insert.class, Update.class})
    private String situationDescription;

    /**
     * 问题描述
     */
    @ApiModelProperty("问题描述")
    @NotBlank(message = "问题描述不能为空", groups = {Insert.class, Update.class})
    @Length(max = 500, message = "问题描述不能超过500位", groups = {Insert.class, Update.class})
    private String problemStatement;

    /**
     * 病历
     */
    @ApiModelProperty("病历")
    @NotBlank(message = "病历不能为空", groups = {Insert.class, Update.class})
    @Length(max = 100, message = "病历不能超过100位", groups = {Insert.class, Update.class})
    private String medicalRecord;

    /**
     * 状态
     */
    @ApiModelProperty("状态")
    private Integer status;

    /**
     * 问诊资料文件
     */
    @ApiModelProperty("问诊资料文件")
    private List<String> fileUrls;

	@ApiModelProperty("预约时间段业务主键")
	private Long schedulePlanDetailId;
}
