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

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.lantone.qc.pub.util.StringUtil;
import com.lantone.qc.trans.comsis.CommonAnalysisUtil;
import lombok.extern.slf4j.Slf4j;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;

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

/**
 * @Description:
 * @author: rengb
 * @time: 2020/9/17 19:19
 */
@Slf4j
public class NingHaiYiYiPreoperativeHtmlAnalysis implements NingHaiYiYiHtmlAnalysis {

    private String modeId = "11";

    @Override
    public Map<String, String> analysis(String... args) {
        Map<String, String> map = Maps.newLinkedHashMap();
        try {
            String html = args[0];
            String recTitle = args[1];
            String recTypeId = args[2];
            Element bigDivElement = Jsoup.parse(html).selectFirst("body").child(0).getElementById("main");
            analysisGeneral(bigDivElement, map);

            NingHaiYiYiHtmlAnalysisUtil.mapValueRemoveStartColon(map);
            NingHaiYiYiHtmlAnalysisUtil.insertModuleId(modeId, recTypeId, map);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        return map;
    }

    private void analysisGeneral(Element bigDivElement, Map<String, String> map) {
        /*if (bigDivElement.selectFirst("hr") != null) {
            bigDivElement.selectFirst("hr").previousElementSiblings().remove();
        }*/
        String text = NingHaiYiYiHtmlAnalysisUtil.blockDivToStr(bigDivElement, true);

        int index1 = text.lastIndexOf("经治医师签名");
        int index2 = text.lastIndexOf("主刀医师签名");
        if (index1 != -1 && index2 != -1) {
            text = text.substring(0, index1).replace("（如高血压病、冠心病、糖尿病、脑梗、心梗、心肺肝肾功能不全，口服抗凝药", "").replace("等）", "")
                    .replace("（如腹腔镜可能改开腹等）", "").replace("（如腹腔镜可能改开腹", "").replace("皮瓣转移术可能的变更方案","")
                    .replace("四级手术、疑难手术等必须填写以下“具体讨论意见”，作为科室三大讨论本留存资料", "")
                    .replace("术后术后", "术后")
                    + text.substring(index1, index2).replace("签字时间", "经治医师签字时间：").replace("年月日时分", "")
                    + text.substring(index2).replace("签字时间", "主刀医师签字时间：").replace("年月日时分", "");
        }
        text = text.replace("术前讨论及术前小结", "").replace("讨论结论：", "").replace("年月日时\n" +
                "分", "").replace("二、","");
        List<String> titles = Lists.newArrayList("姓名", "性别", "出生日期", "出生年月", "科别", "科室", "病区", "床号", "床位", "住院号",
                "讨论时间", "讨论方式", "参加人员", "一、简要病情", "具体讨论意见","1．术前诊断","2．手术指征与禁忌征","3．可替代方案",
                "1.术前诊断", "2.手术指征与禁忌征", "3.可替代方案", "4.拟施手术方式（名称）及可能的变更方案","4．拟施手术方式、名称及可能的变更","5.计划性多次手术",
                "5.本次手术是否属于计划性多次手术", "5.拟施麻醉方式", "6.术前特殊准备", "7.主要术中、术后风险及防范措施", "8.术中、术后注意事项（含护理事项）",
                "5．计划性多次手术","6．拟施麻醉方式","7．术前特殊准备","8．主要术中、术后风险及防范措施","9．术中、术后注意事项（含护理事项）",
                "6.拟施麻醉方式", "7.术前特殊准备", "8.主要术中、术后风险及防范措施", "9.术中、术后注意事项（含护理事项）",
                "术前诊断", "手术指征", "拟施手术名称及方式", "拟施麻醉方式", "其他术前相关情况", "注意事项",
                "经治医师签名", "经治医师签字时间", "主刀医师签名", "医生签名", "主刀医师签字时间", "签字时间");
        CommonAnalysisUtil.cutByTitles(text, titles, 0, map);
        CommonAnalysisUtil.processType(map, "5.计划性多次手术");
        CommonAnalysisUtil.processType(map, "5.本次手术是否属于计划性多次手术");
        CommonAnalysisUtil.processType(map, "讨论方式");
        CommonAnalysisUtil.makeEmpty(map, "主刀医生签名");
        // 解决医生签名显示 年 月 日 时 分
        signatureTime(map);
    }

    /**
     * 解决医生签名时间显示 年 月 日 时 分
     *
     * @param map
     */
    private void signatureTime(Map<String, String> map) {
        String goCureDoctor = map.get("经治医师签字时间");
        String operateDoctor = map.get("主刀医师签字时间");
        if (StringUtil.isNotBlank(goCureDoctor) && goCureDoctor.contains("年 月 日 时 分")) {
            map.put("经治医师签字时间", goCureDoctor.replace("年 月 日 时 分", ""));
        }
        if (StringUtil.isNotBlank(operateDoctor) && operateDoctor.contains("年 月 日 时 分")) {
            map.put("主刀医师签字时间", operateDoctor.replace("年 月 日 时 分", ""));
        }
    }

}