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 ZqczRyflEnum {
    LINGDAO_BANZI("1", "领导班子"),
    SANSHI_YIZHONGXIN("2", "三室一中心"),
    BANZHAN("3", "班站");

    private final String code;
    private final String name;

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

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

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

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

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

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

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