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

import com.google.common.collect.Maps;
import com.lantone.qc.pub.util.FileUtil;
import com.lantone.qc.pub.util.StringUtil;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * @Description: xml解析工具
 * @author: rengb
 * @time: 2020/3/28 14:23
 */
public class CxXmlUtilTemp {

    public static String cutXml(String xml) {
        try {
            Document doc = DocumentHelper.parseText(xml);
            return doc.getRootElement().element("DocObjContent").asXML();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Map<String, String> beHospitalizedXmlToMap(String xml) {
        return beHospitalizedXmlToMap(xml, "");
    }

    public static Map<String, String> beHospitalizedXmlToMap(String xml, String modelName) {
        Map<String, String> retMap = Maps.newLinkedHashMap();
        try {
            String helpTip, contentText;
            Element contentTextElement;
            Document doc = DocumentHelper.parseText(xml);
            Element rootElement = doc.getRootElement().element("DocObjContent");

            if (modelName.equals("首次病程录") || modelName.equals("查房记录") || modelName.equals("会诊记录") || modelName.equals("输血记录")
                    || modelName.equals("术前讨论小结") || modelName.equals("阶段小结") || modelName.equals("术后首次谈话及病程录")
                    || modelName.equals("转出记录") || modelName.equals("输血后效果评价") || modelName.equals("输血后效果评价") || modelName.equals("危急值记录")
                    || modelName.equals("抢救记录") || modelName.equals("死亡病例讨论记录")) {
                if (rootElement.element("Region") != null && rootElement.element("Region").element("Content_Text") != null) {
                    retMap.put("内容", rootElement.element("Region").element("Content_Text").getText());
                    return retMap;
                }
            }

            List<Element> sectionElements = rootElement.elements("Section");
            Map<String, String> sectionMap = Maps.newLinkedHashMap();
            for (Element sectionElement : sectionElements) {
                helpTip = sectionElement.attributeValue("HelpTip");
                if (StringUtil.isBlank(helpTip)) {
                    continue;
                }
                contentTextElement = sectionElement.element("Content_Text");
                if (contentTextElement == null) {
                    contentText = sectionElement.getStringValue().trim();
                } else {
                    contentText = contentTextElement.getTextTrim();
                }
                sectionMap.put(helpTip, contentText);
            }

            List<Element> newCtrlElements = rootElement.elements("NewCtrl");
            Map<String, String> newCtrlMap = Maps.newLinkedHashMap();
            for (Element newCtrlElement : newCtrlElements) {
                helpTip = newCtrlElement.attributeValue("HelpTip");
                if (StringUtil.isBlank(helpTip)) {
                    continue;
                }
                contentTextElement = newCtrlElement.element("Content_Text");
                if (contentTextElement == null) {
                    contentText = newCtrlElement.getStringValue().trim();
                } else {
                    contentText = contentTextElement.getTextTrim();
                }
                newCtrlMap.put(helpTip, contentText);
            }
            retMap.putAll(newCtrlMap);
            retMap.putAll(sectionMap);


//            retMap.put("姓名", newCtrlMap.get("姓名"));
//            retMap.put("性别", newCtrlMap.get("性别"));
//            retMap.put("年龄", newCtrlMap.get("年龄"));
//            retMap.put("民族", newCtrlMap.get("民族"));
//            retMap.put("职业", newCtrlMap.get("职业"));
//            retMap.put("出生地", newCtrlMap.get("出生地"));
//            retMap.put("婚姻", newCtrlMap.get("婚姻状况"));
//            retMap.put("联系地址", "");
//            retMap.put("病史陈述者", newCtrlMap.get("供史者"));
//            retMap.put("出生日期", newCtrlMap.get("出生日期"));
//            retMap.put("户口地址", newCtrlMap.get("户口地址"));
//            retMap.put("电话", newCtrlMap.get("联系电话"));
//            retMap.put("入院日期", newCtrlMap.get("入院日期"));
//            retMap.put("记录日期", newCtrlMap.get("记录日期"));
//            retMap.put("辅助检查", newCtrlMap.get("辅助检查"));
//            retMap.put("初步诊断", newCtrlMap.get("初步诊断"));
//            retMap.put("修正诊断", newCtrlMap.get("修正诊断"));
//            retMap.put("补充诊断", newCtrlMap.get("补充诊断"));
//            retMap.put("主诉", newCtrlMap.get("主诉"));
//            retMap.put("现病史", newCtrlMap.get("现病史"));
//
//            retMap.put("既往史", sectionMap.get("既往史"));
//            retMap.put("个人史", sectionMap.get("个人史"));
//            retMap.put("婚育史", sectionMap.get("婚育史:"));
//            retMap.put("月经史", sectionMap.get("月经史"));
//            retMap.put("家族史", sectionMap.get("家族史"));
//            retMap.put("专科体格检查", sectionMap.get("体格检查"));
//
//            String tgjc = sectionMap.get("一般情况") + "。"
//                    + sectionMap.get("皮肤情况") + "。"
//                    + newCtrlMap.get("淋巴") + "。"
//                    + sectionMap.get("头部检查") + "。"
//                    + sectionMap.get("颈部") + "。"
//                    + sectionMap.get("胸部检查") + "。"
//                    + sectionMap.get("肺部检查") + "。"
//                    + sectionMap.get("心脏检查") + "。"
//                    + newCtrlMap.get("血管") + "。"
//                    + sectionMap.get("腹部检查") + "。"
//                    + newCtrlMap.get("外生殖器") + "。"
//                    + newCtrlMap.get("直肠肛门") + "。"
//                    + sectionMap.get("四肢脊柱检查") + "。"
//                    + sectionMap.get("神经系统检查") + "。"
//                    + newCtrlMap.get("其他说明") + "。";
//            retMap.put("体格检查", tgjc);
        } catch (Exception e) {
        }
        return retMap;
    }

    public static Map<String, String> firstLevelNodeValue(String a, String x) {
        return null;
    }

    public static String getTextByNodePath(String a, String x) {
        return null;
    }

    public static void main(String[] args) {
        String msg = FileUtil.fileRead("C:\\Users\\RGB\\Desktop\\调试\\入院记录.txt");
        Map<String, String> map = beHospitalizedXmlToMap(msg);
        map.keySet().forEach(key -> {
            System.out.println(key + "---" + map.get(key));
        });
    }

}