package com.weather.modules.weather.filescan.utils;

import java.util.Map;

public class FileNameParser {

    /** 模式预报代码 → 模式名称映射 */
    private static final Map<String, String> MODEL_CODE_MAP = Map.of(
            "2FGrapesCR", "CMA-MESO",
            "2FGZ",       "CMA-GD",
            "2FGZ_RUC",   "CMA-GDRUC",
            "2FSMB",      "CMA-SH9",
            "2FSMB_RUC",  "CMA-SH3"
    );

    /**
     * 解析文件名，支持两种格式：
     * 1. 区域文件: {@code <地区>-<指标>.ext} 或 {@code <地区>-<指标>_全年.ext}
     * 2. 模式预报: {@code <模式代码>.gif}（如 2FGrapesCR.gif → CMA-MESO）
     */
    public static ParseResult parse(String fileName) {
        ParseResult result = new ParseResult();

        int dotIdx = fileName.lastIndexOf('.');
        String ext = dotIdx > 0 ? fileName.substring(dotIdx + 1).toLowerCase() : "";
        String nameWithoutExt = dotIdx > 0 ? fileName.substring(0, dotIdx) : fileName;
        result.setExt(ext);

        // 尝试匹配模式预报代码
        String modelName = MODEL_CODE_MAP.get(nameWithoutExt);
        if (modelName != null) {
            result.setFileType("MODEL");
            result.setModelCode(nameWithoutExt);
            result.setModelName(modelName);
            result.setRegion(null);
            result.setCategory("模式预报");
            result.setPeriod(null);
            return result;
        }

        // 区域文件解析：<地区>-<指标> 或 <地区>-<指标>_全年
        result.setFileType("REGION");
        result.setModelCode(null);
        result.setModelName(null);

        int dashIdx = nameWithoutExt.indexOf('-');
        if (dashIdx > 0) {
            result.setRegion(nameWithoutExt.substring(0, dashIdx));
            String afterDash = nameWithoutExt.substring(dashIdx + 1);

            int annualIdx = afterDash.indexOf("_全年");
            if (annualIdx > 0) {
                result.setCategory(afterDash.substring(0, annualIdx));
                result.setPeriod("全年");
            } else {
                result.setCategory(afterDash);
                result.setPeriod(null);
            }
        } else {
            result.setRegion(null);
            result.setCategory(nameWithoutExt);
            result.setPeriod(null);
        }

        return result;
    }

    /** 检查文件名是否属于模式预报文件 */
    public static boolean isModelFile(String fileName) {
        int dotIdx = fileName.lastIndexOf('.');
        String nameWithoutExt = dotIdx > 0 ? fileName.substring(0, dotIdx) : fileName;
        return MODEL_CODE_MAP.containsKey(nameWithoutExt);
    }

    /** 根据模式代码获取模式名称 */
    public static String getModelName(String modelCode) {
        return MODEL_CODE_MAP.get(modelCode);
    }
}
