package com.lantone.qc.trans.changx;

import com.google.common.collect.Lists;
import com.lantone.qc.pub.model.doc.SeriouslyIllNoticeDoc;
import com.lantone.qc.pub.model.vo.MedrecVo;
import com.lantone.qc.trans.ModelDocTrans;
import com.lantone.qc.trans.comsis.ModelDocGenerate;
import com.lantone.qc.trans.comsis.Preproc;

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

/**
 * @Description: 病重通知书文档生成
 * @author: rengb
 * @time: 2020/3/19 19:41
 */
public class ChangxSeriouslyIllNoticeDocTrans extends ModelDocTrans {

    @Override
    public List<SeriouslyIllNoticeDoc> extract(MedrecVo medrecVo) {
        List<SeriouslyIllNoticeDoc> retList = Lists.newArrayList();
        List<String> contents = (List) medrecVo.getContent().get("content");
        contents.forEach(content -> {
            retList.add(getSeriouslyIllNoticeDoc(content));
        });
        return retList;
    }

    private SeriouslyIllNoticeDoc getSeriouslyIllNoticeDoc(String content) {
        Map<String, String> pageData = Preproc.extract_doc_pub(true, pageDataTitles, content);
        pageData.put("病程记录内容",
                pageData.get("病程记录内容")
                        .replace(pageData.get("病程记录时间"), "")
                        .replace(pageData.get("病程记录名称"), "")
        );

        List<String> targetTitles = Lists.newArrayList();
        sourceTitles.forEach(sourceTitle -> {
            String targetTitle = "";
            for (int index = 0; index < sourceTitle.length(); index++) {
                if (index == sourceTitle.length() - 1) {
                    targetTitle += sourceTitle.substring(index, index + 1);
                } else {
                    targetTitle += sourceTitle.substring(index, index + 1) + "[\\s\\p{Zs}]*";
                }
            }
            targetTitles.add(targetTitle);
        });

        Map<String, String> sourceMap = Preproc.extract_doc_pub(true, targetTitles, content);
        sourceMap.put("记录时间", sourceMap.get("病程记录时间"));

        SeriouslyIllNoticeDoc seriouslyIllNoticeDoc = ModelDocGenerate.seriouslyIllNoticeDocGen(sourceMap);
        seriouslyIllNoticeDoc.setText(content);
        seriouslyIllNoticeDoc.setPageData((Map) pageData);

        return seriouslyIllNoticeDoc;
    }

    private List<String> pageDataTitles = Lists.newArrayList(
            "病程记录时间",
            "病程记录名称",
            "病程记录内容",
            "记录医师"
    );

    private List<String> sourceTitles = Lists.newArrayList(
            "病程记录时间",
            "病程记录名称",
            "病程记录内容",
            "记录时间",
            "记录医师"
    );

}