package com.docus.server.record.common.pojo.entity;

import com.docus.core.util.Func;
import com.docus.infrastructure.core.exception.BaseException;
import com.docus.server.record.RecordExceptionEnum;
import com.docus.server.record.common.pojo.dto.IdType;
import com.docus.server.record.common.pojo.dto.InpatientNo;
import lombok.Getter;

import java.util.Map;

@Getter
public class MedicalRecord {
    /**
     * 住院号
     */
    private InpatientNo inpatientNo;
    /**
     * 记账号/住院流水号
     */
    private String jzh;
    /**
     * 住院次数
     */
    private Integer admisstimes;
    /**
     * 采集来源系统
     */
    private String sysFlag;
    /**
     * 下载地址
     */
    private String downUrl;
    /**
     * 文件名
     */
    private String fileTitle;

    /**
     * 采集流水号/文件唯一id
     */
    private String serialnum;

    /**
     * 文件分类id
     */
    private String assortId;

    /**
     * 采集类型(文件来源 1:采集器；2：扫描生产软件)
     */
    private String fileSource;

    /**
     * 业务病案主键
     */
    private String patientId;

    private String sourceInfo;


    /**
     * 1. 记账号，2. 住院号与次数
     */
    private IdType idType;


    /**
     * 拓展参数
     */
    private Map<String, Object> params;


    public MedicalRecord(InpatientNo inpatientNo, String jzh, Integer admisstimes,
                         String sysFlag, String downUrl, String fileTitle, String serialnum,
                         String assortId, String fileSource,
                         String patientId, String sourceInfo, IdType idType, Map<String, Object> params) {
        this.inpatientNo = inpatientNo;
        this.jzh = jzh;
        this.admisstimes = admisstimes;
        this.sysFlag = sysFlag;
        this.downUrl = downUrl;
        this.fileTitle = fileTitle;
        this.serialnum = serialnum;
        this.assortId = assortId;
        this.fileSource = fileSource;
        this.patientId = patientId;
        this.sourceInfo = sourceInfo;
        this.idType = idType;
        this.params = params;

        //需要强校验每个字段是否符合规则，并且限制值范围。

        vaid();

    }


    public void vaid() {
        if (idType == IdType.JZH) {
            //根据记账号查询，需要判断 是否存在。
            if (Func.isEmpty(jzh)) {
                throw new BaseException(RecordExceptionEnum.NOT_NULL, "jzh不能为空");
            }
        } else {
            //根据住院号+住院次数
            //根据记账号查询，需要判断 是否存在。
            if (Func.isEmpty(admisstimes) && Func.isEmpty(inpatientNo)) {
                throw new BaseException(RecordExceptionEnum.NOT_NULL, "jzh不能为空");
            }

        }


    }

}
