package thyyxxk.webserver.entity.zhuyuanyisheng.emr;

import java.io.Serializable;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import thyyxxk.webserver.service.zhuyuanyisheng.emr.EmrServer;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;


/**
 * @author xc
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EmrPatientData implements Serializable {

    private static final long serialVersionUID = 172057163746918134L;

    /**
     * id
     * 自增id
     */
    private Integer id;

    /**
     * 患者住院号
     */
    @NotNull(message = "住院号不能为空")
    @NotBlank(message = "住院号不能为空")
    private String patNo;

    /**
     * 患者住院次数
     */
    @NotNull(message = "患者住院次数不能为空")
    private Integer times;

    /**
     * 电子病历中的唯一值
     */
    @NotNull(message = "电子病历中的唯一值不能为空")
    @NotBlank(message = "电子病历中的唯一值不能为空")
    @TableId
    private String emrDocumentId;

    /**
     * 病历模板编码。
     */
    @NotNull(message = "病历模板编码不能为空")
    @NotBlank(message = "病历模板编码不能为空")
    private String emrCategoryCode;

    /**
     * 是否删除
     */
    private Integer delFlag;

    /**
     * 模板的名称
     */
    @NotNull(message = "模板的名称为空")
    @NotBlank(message = "模板的名称为空")
    private String emrName;

    /**
     * 医生取得名称
     */
    private String name;

    /**
     * 创建人
     */
    private String createId;

    @TableField(exist = false)
    private String createName;

    /**
     * 创建时间
     */
    private Date createDate;

    /**
     * 修改人
     */
    private String modifyId;

    /**
     * 修改时间
     */
    private Date modifyDate;

    /**
     * 子节点
     */
    @TableField(exist = false)
    private List<EmrPatientData> children;

    /**
     * 电子病历结构化数据
     */
    @TableField(exist = false)
    private JSONObject emrDataElement;

    @TableField(exist = false)
    private String emrDataElementStr;

    /**
     * 是否提交
     */
    private Integer submit;

    /**
     * 提交人
     */
    private String submitId;

    /**
     * 提交时间
     */
    private Date submitTime;


    /**
     * 前端保存的页面数据结构
     */
    @TableField(exist = false)
    private JSONObject documentData;

    /**
     * 病程记录的片段
     */
    @TableField(exist = false)
    private List<EmrProgressNote> fragment;

    /**
     * 父级节点
     */
    private String parent;

    /**
     * 管床医生
     */
    private String referPhysician;

    /**
     * 主治医生
     */
    private String consultPhysician;

    /**
     * 主任医生
     */
    private String deptDirector;

    /**
     * 审核医生
     */
    private String reviewDoctors;

    /**
     * 审核时间
     */
    private Date reviewTime;

    public String getType() {
        if (EmrServer.THIS_IS_DIR.equals(emrCategoryCode)) {
            return "group-category";
        }
        return "category";
    }

    /**
     * { code: 1, name: "扫码" },   { code: 2, name: "移动平板" },   { code: 3, name: "有线手写板" }
     */
    private Integer signType;

    /**
     * 0-初始化值 1-医生发起签名的请求到移动平板上面 2-发送请求到了ca的接口 3-完成签名
     */
    private Integer signComplete;

    @TableField(exist = false)
    private Integer sort;

    public String getEmrDataElementStr() {
        if (emrDataElement != null) {
            return emrDataElement.toString();
        }
        return "";
    }

    public static LambdaQueryWrapper<EmrPatientData> lambdaQueryWrapper() {
        return new LambdaQueryWrapper<>();
    }
}
