package thyyxxk.webserver.utils;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import thyyxxk.webserver.entity.medicalinsurance.inpatient.BatjBa4;
import thyyxxk.webserver.entity.medicalinsurance.inpatient.YbZyDisDiag;
import thyyxxk.webserver.entity.vo.quality.DiseInfoListVO;
import thyyxxk.webserver.entity.vo.quality.OprtInfoListVO;

import java.util.*;

/**
 * @Description:
 * @Author:lihong
 * @Date: 2022/12/14
 */
public class ConvertUtil {
    /*治疗类别 转换关系 key 为 his的编码 value 为创智的编码*/
    public static final Map<String, String> TYT_TYPE_MAP = new HashMap<>(4);
    static {
        TYT_TYPE_MAP.put("10","1");
        TYT_TYPE_MAP.put("22","2.2");
        TYT_TYPE_MAP.put("21","2.1");
        TYT_TYPE_MAP.put("30","2.3");
    }

    public static List<DiseInfoListVO> ybZyDisDiag2DiseInfoListVO(List<YbZyDisDiag> ybZyDisDiag, String visitId,List<Map<String, String>> ybDisCodes) {
        List<DiseInfoListVO> diseInfoListVOS = new ArrayList<>();
        if(CollUtil.isEmpty(ybZyDisDiag))   return diseInfoListVOS;
        int num = 1;
        for (YbZyDisDiag zyDisDiag : ybZyDisDiag) {
            DiseInfoListVO diseInfoListVO = new DiseInfoListVO();
            diseInfoListVO.setVisit_id(visitId);
            diseInfoListVO.setAdm_cond_type(zyDisDiag.getAdmissCond()==null ? "" : zyDisDiag.getAdmissCond().toString());
            if(CollUtil.isEmpty(ybDisCodes)){
                diseInfoListVO.setDiag_code(zyDisDiag.getDisDiag());
                diseInfoListVO.setDiag_name(zyDisDiag.getDisDiagComment());
            }else {
                for(Map<String,String> map:ybDisCodes){
                    if(zyDisDiag.getDisDiag().equals(map.get("code"))){
                        diseInfoListVO.setDiag_code(map.get("yb_code"));
                        diseInfoListVO.setDiag_name(map.get("yb_name"));
                        break;
                    }
                }
            }
            if(StringUtil.isBlank(diseInfoListVO.getDiag_code())){
                diseInfoListVO.setDiag_code(zyDisDiag.getDisDiag());
                diseInfoListVO.setDiag_name(zyDisDiag.getDisDiagComment());
            }
            diseInfoListVO.setSort_no(num+"");
            diseInfoListVO.setMaindiag_flag(num==1?"1":"0");
            ++num;
            diseInfoListVOS.add(diseInfoListVO);
        }
        return diseInfoListVOS;
    }

    public static List<OprtInfoListVO> batjBa4ToOprtInfoListVO(List<BatjBa4> batjBa4, String visitId,List<Map<String, String>> ybOprtCodes,List<Map<String, String>> ybMzfs,List<Map<String, String>> ysCodeDict) {
        List<OprtInfoListVO> oprtInfoListVOS = new ArrayList<>();
        if(CollUtil.isEmpty(batjBa4))   return oprtInfoListVOS;
        for (int i = 0; i < batjBa4.size(); i++) {
            OprtInfoListVO oprtInfoListVO = new OprtInfoListVO();
            oprtInfoListVO.setOprn_oprt_type(i==0?"1":"2");	;//	手术操作类别	字符型
            for(Map<String,String> oprt:ybOprtCodes){
                if(Objects.equals(oprt.get("code"), batjBa4.get(i).getSsbm())){
                    oprtInfoListVO.setOprn_oprt_name(oprt.get("yb_name"));
                    oprtInfoListVO.setOprn_oprt_code(oprt.get("yb_code"));
                    break;
                }
            }
            if(StringUtil.isBlank(oprtInfoListVO.getOprn_oprt_code())){
                oprtInfoListVO.setOprn_oprt_name(batjBa4.get(i).getSsmc());	;//	手术操作名称	字符型
                oprtInfoListVO.setOprn_oprt_code(batjBa4.get(i).getSsbm());	;//	手术操作代码	字符型
            }
            oprtInfoListVO.setAnst_way(getysYbCode(ybMzfs,batjBa4.get(i).getMzff()));	;//	麻醉方式	字符型
            oprtInfoListVO.setOper_dr_code(getysYbCode(ysCodeDict,batjBa4.get(i).getSsys()));	//	术者医师代码	字符型
            oprtInfoListVO.setOper_dr_name(batjBa4.get(i).getSsysName());	//	术者医师姓名	字符型
            oprtInfoListVO.setAnst_dr_code(getysYbCode(ysCodeDict,batjBa4.get(i).getMzys()));	//	麻醉医师代码	字符型
            oprtInfoListVO.setAnst_dr_name(batjBa4.get(i).getMzysName());	//	麻醉医师姓名	字符型
            oprtInfoListVO.setOprn_oprt_begntime(DateUtil.formatDateTime(batjBa4.get(i).getOpStartDate()));	//	手术操作开始时间	日期时间型
            oprtInfoListVO.setOprn_oprt_endtime(DateUtil.formatDateTime(batjBa4.get(i).getOpEndDate()));	//	手术操作结束时间	日期时间型
            oprtInfoListVO.setAnst_begntime(DateUtil.formatDateTime(batjBa4.get(i).getAnstStartDate()));	//	麻醉开始时间	日期时间型
            oprtInfoListVO.setAnst_endtime(DateUtil.formatDateTime(batjBa4.get(i).getAnstEndDate()));	//	麻醉结束时间	日期时间型
            oprtInfoListVO.setVisit_id(visitId);	;//	就诊id	字符型
            oprtInfoListVO.setSort_no(batjBa4.get(i).getSsxh()+"");//	手术排序	字符型
            oprtInfoListVO.setOprt_date(DateUtil.formatDate(batjBa4.get(i).getSsrq()));	//	手术操作日期	日期时间型
            oprtInfoListVOS.add(oprtInfoListVO);
        }
        return oprtInfoListVOS;
    }


   private static String  getysYbCode(List<Map<String, String>> dictCodes,String code){
       for (Map<String,String> dictCode:dictCodes){
           if(Objects.equals(dictCode.get("code"), code)){
            return dictCode.get("yb_code");
           }
       }
       return code;
    }


}
