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 ZqczXmlbEnum {
    GEREN_YINGJI("1", "个人应急项目"),
    TUANDUI_YINGJI("2", "团队应急项目"),
    DANREN_SHUANGREN("3", "单人/双人操作项目"),
    TUANDUI_CAOZUO("4", "团队操作项目"),
    ;

    private final String code;
    private final String name;

    ZqczXmlbEnum(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 (ZqczXmlbEnum 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 (ZqczXmlbEnum e : values()) {
            if (e.name.equalsIgnoreCase(name.trim())) {
                return e.code;
            }
        }
        // 无匹配返回空
        return "";
    }

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

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

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

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

    /**
     * 获取所有的code-name的映射
     */
    public static Map<String, String> getCodeToNameMap() {
        return Arrays.stream(values())
                .collect(Collectors.toMap(
                        ZqczXmlbEnum::getCode,  // key = code
                        ZqczXmlbEnum::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(ZqczXmlbEnum::toCodeNameStr) // 调用单个拼接方法
                .collect(Collectors.toList());
    }

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