package com.lantone.qc.trans.ywzxyy.util;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.lantone.qc.dbanaly.facade.ywzxyy.YwzxyyXmlUtil;
import com.lantone.qc.pub.util.StringUtil;
import com.lantone.qc.trans.comsis.CommonAnalysisUtil;
import lombok.extern.slf4j.Slf4j;

import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @Description:
 * @author: rengb
 * @time: 2021/1/25 14:04
 */
@Slf4j
public class YwzxyyBeHospitalizedXmlAnalysis implements YwzxyyXmlAnalysis {

    @Override
    public Map<String, String> analysis(String... args) {
        Map<String, String> ret = null;
        String xml = args[0];
        String recTitle = args[1];
        String recTypeId = args[2];
        if (recTitle.equals("住院病历") || recTitle.equals("入院记录") || recTitle.equals("息肉住院病历_邢利")
                || recTitle.equals("入院记录（眼科）") || recTitle.equals("脱垂住院病历_邢利") || recTitle.equals("脓毒血症")) {
            ret = zybl(xml);
        } else if (recTitle.equals("术前讨论记录")) {

        } else if (recTitle.equals("术前讨论兼术前小结")) {

        }
        return ret;
    }

    private Map<String, String> zybl(String xml) {
        Map<String, String> structureMap = Maps.newHashMap();
        try {
            xml = xml.replaceAll("(<慢性疾病>)[\\s\\S]*(</既往病史>)", "</既往病史>")
                    .replaceAll("(<人体脏器>)[\\s\\S]*(</既往病史>)", "</既往病史>")
                    .replaceAll("(<传染病名称>)[\\s\\S]*(</传染病史>)", "</传染病史>")
                    .replaceAll("(<过敏源>)[\\s\\S]*(</药物过敏史>)", "</药物过敏史>")
                    .replaceAll("(<经量>)[\\s\\S]*(</月经史>)", "</月经史>")
                    .replaceAll("(<近亲结婚否>)[\\s\\S]*(</婚姻情况>)", "</婚姻情况>")
                    .replaceAll("(<足月产次数>)[\\s\\S]*(</生育情况>)", "</生育情况>")
                    .replaceAll("(<收缩压值>)[\\s\\S]*(</血压>)", "</血压>")
                    .replaceAll("(<反射程度>)[\\s\\S]*(</脑膜刺激征>)", "</脑膜刺激征> ")
                    .replaceAll("(<反射程度>)[\\s\\S]*(</深反射>)", "</深反射> ")
                    .replaceAll("(<肌张力>)[^(<肌张力>)]*(<肌张力>)", "<肌张力><肌张力>").replaceAll("(</肌张力>)[^(</肌张力>)]*(</肌张力>)", "</肌张力></肌张力> ")
                    .replaceAll("(<肌力>)[^(<肌力>)]*(<肌力>)", "<肌力><肌力>").replaceAll("(</肌力>)[^(</肌力>)]*(</肌力>)", "</肌力></肌力> ")
                    .replaceAll("(</记录医师>)[\\s\\S]{0,10}(<记录医师签名时间>)", "</记录医师>记录医师签名时间:<记录医师签名时间>");
            xml = StringUtil.matRegx(xml, "(</专科检查>检查医师)[\\s\\S]*(<病历记录时间>)", "<病历记录时间>", "记录医师签名时间:<病历记录时间>");
            xml = StringUtil.matRegx(xml, "(</专科检查>检查医师)[\\s\\S]*(<记录医师签名时间>)", "<记录医师签名时间>", "记录医师签名时间:<记录医师签名时间>");
            xml = xml.replace("体格检查表(二)补 充 及 专 科 情 况", "体格检查表(二)补 充 及 专 科 情 况:")
                    .replace("体格检查（一）", "体格检查（一）:")
                    .replace("营养风险筛查", "营养风险筛查:");
            String text = YwzxyyXmlUtil.xml2Txt(xml);
            List<String> titles = CommonAnalysisUtil.sortTitles(
                    Lists.newArrayList("家长姓名", "姓　　名", "姓　　名", "姓名", "性 　 别", "性    别", "性别", "年    龄",
                            "年龄", "民　　族", "民    族", "民族", "现 住 址", "现住址", "联系电话", "婚    姻", "婚姻", "出 生 地",
                            "出生地", "职    业", "职业", "联系地址", "入院日期", "入院时间", "供 史 者", "供史者", "病史陈述者",
                            "病史可靠程度", "记录日期", "主   诉", "主    诉", "主诉", "现病史", "现 病 史", "既往史", "既 往 史", "个 人 史",
                            "个人史", "月经史", "月 经 史", "婚育史", "婚 育 史", "家族史", "家 族 史", "辅助检查", "营养风险筛查",
                            "初步诊断", "修正诊断", "补充诊断", "记录医师签名时间", "医师签名", "记录时间", "体格检查（一）",
                            "体格检查表(二)补 充 及 专 科 情 况", "实验室检查", "体格检查", "体  格  检  查", "专科检查", "检查医师"),
                    text
            );
            CommonAnalysisUtil.cutByTitles(text, titles, 0, structureMap);
            if (structureMap.containsKey("体格检查（一）")) {
                structureMap.put("体格检查", structureMap.get("体格检查（一）"));
                structureMap.remove("体格检查（一）");
            }
            if (structureMap.containsKey("体格检查表(二)补充及专科情况")) {
                structureMap.put("专科检查", structureMap.get("体格检查表(二)补充及专科情况"));
                structureMap.remove("体格检查表(二)补充及专科情况");
            }
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        return structureMap;
    }

}