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 ZqczCyzyGzcjEnum {
    YINGJI_CHUZHI("1", "应急处置工作场景"),
    XUNJIAN_CHUZHI("2", "巡检处置工作场景"),
    WEIHU_BAOYANG("3", "维护保养工作场景"),
    CUOSHI_ZHIXING("4", "措施执行工作场景"),
    ZILIAO_HUAYAN("5", "资料化验工作场景"),
    YE_YAN_YOU("6", "页岩油工作场景"),
    ZHU_SHUI_ZHAN("7", "注水站工作场景");

    private final String code;
    private final String name;

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

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

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

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

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

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

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