package cn.iocoder.yudao.module.erp.controller.admin.mold.vo;

import cn.iocoder.yudao.module.erp.controller.admin.mold.enums.OrgTypeStatusEnum;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import org.springframework.stereotype.Component;

/**
 * 模具类型状态转换器（英文字符串 ↔ 中文）
 */
@Component
public class OrgTypeConverter implements Converter<String> { // 泛型改为 String，对应英文字符串

    /**
     * 读取Excel时调用（Excel中的英文/中文 → Java对象的英文字符串）
     */
    @Override
    public String convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty,
                                    GlobalConfiguration globalConfiguration) {
        String cellValue = cellData.getStringValue();
        if (cellValue == null || cellValue.trim().isEmpty()) {
            return null;
        }

        // 优先匹配中文 → 转换为对应的英文常量名
        for (OrgTypeStatusEnum status : OrgTypeStatusEnum.values()) {
            if (status.getDescription().equals(cellValue)) { // 注意枚举的描述方法是 getDesc
                return status.name(); // 返回枚举的英文常量名（如 IN_USE）
            }
        }

        // 匹配英文 → 直接返回（兼容Excel中填英文的场景）
        for (OrgTypeStatusEnum status : OrgTypeStatusEnum.values()) {
            if (status.name().equals(cellValue)) {
                return cellValue;
            }
        }

        // 无匹配则抛出异常
        throw new IllegalArgumentException("设备状态格式错误: " + cellValue + "，仅支持中文（在机/在库/维修中/保养中/报废）或英文（IN_USE/IN_STOCK/UNDER_REPAIR/UNDER_MAINTENANCE/SCRAPPED）");
    }

    /**
     * 写入Excel时调用（Java对象的英文字符串 → Excel中的中文）
     */
    @Override
    public WriteCellData<?> convertToExcelData(String value, ExcelContentProperty contentProperty,
                                               GlobalConfiguration globalConfiguration) {
        if (value == null || value.trim().isEmpty()) {
            return new WriteCellData<>("");
        }

        // 根据英文常量名匹配枚举，转换为中文
        OrgTypeStatusEnum status = null;
        try {
            status = OrgTypeStatusEnum.valueOf(value); // 通过英文名称获取枚举
        } catch (IllegalArgumentException e) {
            // 若英文匹配失败，尝试兜底匹配中文（兼容异常场景）
            for (OrgTypeStatusEnum s : OrgTypeStatusEnum.values()) {
                if (s.getDescription().equals(value)) {
                    status = s;
                    break;
                }
            }
        }

        String text = status != null ? status.getDescription() : "未知";
        return new WriteCellData<>(text);
    }

    // 必须实现的接口方法：指定转换的Java类型
    @Override
    public Class<?> supportJavaTypeKey() {
        return String.class;
    }

    // 必须实现的接口方法：指定Excel单元格类型
    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }
}