package com.huatek.busi.util;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;

import com.huatek.busi.common.ReportType;

import freemarker.core.ParseException;
import freemarker.template.Configuration;
import freemarker.template.MalformedTemplateNameException;
import freemarker.template.Template;
import freemarker.template.TemplateNotFoundException;

/**
 * @ClassName: FreemarkerUtil
 * @FullClassPath: com.huatek.busi.util.FreemarkerUtil
 * @Description: .
 * @author: Arno
 * @date: Sep 23, 2019 3:44:21 PM
 * @version: 1.0
 */
public class FreemarkerUtil {

    @Autowired
    GetProperties getProperties;

    public static final String ENCODING = "UTF-8";
    private static FreemarkerUtil signleton;

    static {
        try {
            signleton = new FreemarkerUtil();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static Map<String, String> ftlMap = new HashMap<>();

    static {
        ftlMap.put(ReportType.YSP_DAILY_REPORT, "油色谱日报告.ftl");
        ftlMap.put(ReportType.YSP_MONTHLY_REPORT, "油色谱月报告.ftl");

        ftlMap.put(ReportType.BLQ_MONTHLY_REPORT, "避雷器检测月报告.ftl");

        ftlMap.put(ReportType.BYQ_JF_MONTHLY_REPORT, "变压器局放检测月报告.ftl");
        ftlMap.put(ReportType.GIS_JF_MONTHLY_REPORT, "GIS局放检测月报告.ftl");
        // 其他-电缆局放
        ftlMap.put(ReportType.DL_JU_MONTHLY_REPORT, "电缆局放检测月报告.ftl");
        // 电缆-电缆局放
        ftlMap.put(ReportType.DL_JF_MONTHLY_REPORT, "电缆局放检测月报告.ftl");
        ftlMap.put(ReportType.SF6_MONTHLY_REPORT, "SF6检测月报告.ftl");

        ftlMap.put(ReportType.TG_MONTHLY_REPORT, "变压器套管检测月报告.ftl");
        ftlMap.put(ReportType.TX_MONTHLY_REPORT, "铁芯检测月报告.ftl");
        ftlMap.put(ReportType.JJ_MONTHLY_REPORT, "夹件检测月报告.ftl");

        ftlMap.put(ReportType.BYQ_PZ_MONTHLY_REPORT, "变压器拍照设备检测月报告.ftl");
        ftlMap.put(ReportType.GIS_PZ_MONTHLY_REPORT, "GIS拍照设备检测月报告.ftl");
        ftlMap.put(ReportType.BLQ_PZ_MONTHLY_REPORT, "避雷器拍照设备检测月报告.ftl");
        ftlMap.put(ReportType.OTHER_PZ_MONTHLY_REPORT, "其他拍照设备检测月报告.ftl");

        ftlMap.put(ReportType.RX_MONTHLY_REPORT, "容性检测月报告.ftl");

        ftlMap.put(ReportType.BYQ_HWRCX_MONTHLY_REPORT, "变压器红外热成像检测月报告.ftl");
        ftlMap.put(ReportType.GIS_HWRCX_MONTHLY_REPORT, "GIS红外热成像检测月报告.ftl");
        ftlMap.put(ReportType.BLQ_HWRCX_MONTHLY_REPORT, "避雷器红外热成像检测月报告.ftl");
        ftlMap.put(ReportType.OTHER_HWRCX_MONTHLY_REPORT, "其他红外热成像检测月报告.ftl");
        ftlMap.put(ReportType.DL_HWRCX_MONTHLY_REPORT, "电缆红外热成像检测月报告.ftl");

        ftlMap.put(ReportType.WXCE_MONTHLY_REPORT, "无线测温检测月报告.ftl");

        // 其他-电缆环流
        ftlMap.put(ReportType.DLHL_MONTHLY_REPORT, "电缆环流检测月报告.ftl");
        // 电缆-电缆环流
        ftlMap.put(ReportType.DL_DLHL_MONTHLY_REPORT, "电缆环流检测月报告.ftl");

        ftlMap.put(ReportType.FDJ_ZD_MONTHLY_REPORT,"发电机振动检测月报告.ftl");
        ftlMap.put(ReportType.FDJ_YL_MONTHLY_REPORT,"发电机压力检测月报告.ftl");
        ftlMap.put(ReportType.FDJ_JF_MONTHLY_REPORT,"发电机局放检测月报告.ftl");
    }

    private final Configuration configuration;

    private FreemarkerUtil() throws IOException {
        this.configuration = new Configuration(Configuration.VERSION_2_3_28);
        this.configuration.setDefaultEncoding(ENCODING);
        String os = System.getProperty("os.name");
        boolean isWindows = os.toLowerCase().startsWith("win");
        if (isWindows) {
            this.configuration.setDirectoryForTemplateLoading(new File(GetProperties.readPropertiesFile("application.properties").getProperty("windows.freemarktemplate.path")));
        } else {
            try {
                this.configuration.setDirectoryForTemplateLoading(new File(GetProperties.readPropertiesFile("application.properties").getProperty("tomcat.freemarktemplate.path")));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public static FreemarkerUtil getInstance() {
        return signleton;
    }

    /**
     * @param exportType
     * @return Template
     * @Title: getTemplate
     * @Description: 根据类型获取模板
     * @createDate: Sep 23, 2019 6:40:54 PM
     */
    public Template getTemplate(String exportType)
            throws IOException {
        return signleton.configuration.getTemplate(this.getTemplateName(exportType));
    }

    /**
     * @param exportType
     * @return String
     * @Title: getTemplateName
     * @Description: 获取模板
     * @createDate: Sep 23, 2019 6:16:15 PM
     */
    private String getTemplateName(String exportType) {
        return ftlMap.get(exportType);
    }
}
