package com.qianhe.common.enums.zqcz;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public enum ZqczJszyGzcjEnum {
    JISHU_YUNXING("1", "集输运行工作场景"),
    JISHU_HUAYAN("2", "集输化验工作场景"),
    JISHU_WEIHUBAOYANG("3", "集输维护保养工作场景"),
    ZHUSHUZHAN("4", "注水站工作场景"),
    YINGJI_CHUZHI("5", "应急处置工作场景"),
    JISHU_CCUS("6", "集输、CCUS处理站工作场景"),
    CCUS_CHUZHI("7", "CCUS处理站维护保养工作场景");

    private final String code;
    private final String name;

    ZqczJszyGzcjEnum(String code, String name) {
        this.code = code;
        this.name = name;
    }

    public String getCode() {
        return code;
    }

    public String getName() {
        return name;
    }

    /**
     * 通过编码找名称
     */
    public static String getNameByCode(String code) {
        if (code == null || code.trim().isEmpty()) {
            return "";
        }
        for (ZqczJszyGzcjEnum e : values()) {
            if (e.code.equals(code.trim())) {
                return e.name;
            }
        }
        return "";
    }

    /**
     * 通过名称找编码
     */
    public static String getCodeByName(String name) {
        // 空值校验
        if (name == null || name.trim().isEmpty()) {
            return "";
        }
        // 遍历枚举找匹配（忽略大小写，兼容"应急处置"/"应急处置 "等情况）
        for (ZqczJszyGzcjEnum e : values()) {
            if (e.name.equalsIgnoreCase(name.trim())) {
                return e.code;
            }
        }
        // 无匹配返回空
        return "";
    }

    /**
     * 通过编码找整个枚举对象
     */
    public static ZqczJszyGzcjEnum getEnumByCode(String code) {
        if (code == null || code.trim().isEmpty()) {
            return null;
        }
        for (ZqczJszyGzcjEnum e : values()) {
            if (e.code.equals(code.trim())) {
                return e;
            }
        }
        return null;
    }

    /**
     * 获取所有名称
     */
    public static List<String> getAllNames() {
        return Arrays.stream(values())
                .map(ZqczJszyGzcjEnum::getName)
                .collect(Collectors.toList());
    }

    /**
     * 获取所有编码
     */
    public static List<String> getAllCodes() {
        return Arrays.stream(values())
                .map(ZqczJszyGzcjEnum::getCode)
                .collect(Collectors.toList());
    }

    /**
     * 获取所有name-code的映射
     */
    public static Map<String, String> getNameToCodeMap() {
        return Arrays.stream(values())
                .collect(Collectors.toMap(
                        ZqczJszyGzcjEnum::getName,  // key = name
                        ZqczJszyGzcjEnum::getCode,  // value = code
                        (oldValue, newValue) -> oldValue  // 避免重复name（兜底，实际枚举中name唯一）
                ));
    }

    /**
     * 获取所有的code-name的映射
     */
    public static Map<String, String> getCodeToNameMap() {
        return Arrays.stream(values())
                .collect(Collectors.toMap(
                        ZqczJszyGzcjEnum::getCode,  // key = code
                        ZqczJszyGzcjEnum::getName,  // value = name
                        (oldValue, newValue) -> oldValue  // 避免重复code（兜底，实际枚举中code唯一）
                ));
    }

    /**
     * 将当前枚举转为「编码-名称」格式字符串（如：code-name）
     */
    private String toCodeNameStr() {
        return String.format("%s-%s", this.code, this.name);
    }

    /**
     * 获取所有「编码-名称」格式的字符串列表 如：["code-name", "code-name", ...]
     */
    public static List<String> getAllCodeNameStrs() {
        return Arrays.stream(values())
                .map(ZqczJszyGzcjEnum::toCodeNameStr) // 调用单个拼接方法
                .collect(Collectors.toList());
    }

    /**
     * 获取所有「编码-名称」格式的字符串，以竖线分隔 如："code-name|code-name|code-name"
     */
    public static String getAllCodeNameStrWithSeparator() {
        return String.join("|", getAllCodeNameStrs());
    }
}
