import { getDicts } from '@/api/system/dict/data';
import { useDictStore } from '@/store/modules/dict';

/**
 * 将字典标签转换为国际化JSON格式
 * @param dictLabel 主标签
 * @param dictLabelZh 中文标签（可选）
 * @param dictLabelEn 英文标签（可选）
 * @returns 国际化JSON字符串或原标签
 */
const convertToI18nLabel = (dictLabel: string, dictLabelZh?: string, dictLabelEn?: string): string => {
  // 如果已经是JSON格式，直接返回
  if (dictLabel && (dictLabel.startsWith('{') || dictLabel.startsWith('{'))) {
    return dictLabel;
  }
  
  // 如果有中英文标签，构建JSON格式
  if (dictLabelZh || dictLabelEn) {
    const i18nObj: any = {};
    if (dictLabelZh) i18nObj.zh_CN = dictLabelZh;
    if (dictLabelEn) i18nObj.en_US = dictLabelEn;
    // 如果没有提供中文，使用原标签作为中文
    if (!dictLabelZh && dictLabel) i18nObj.zh_CN = dictLabel;
    return JSON.stringify(i18nObj);
  }
  
  // 否则返回原标签
  return dictLabel;
};

/**
 * 获取字典数据
 */
export const useDict = (...args: string[]): { [key: string]: DictDataOption[] } => {
  const res = ref<{
    [key: string]: DictDataOption[];
  }>({});

  args.forEach(async (dictType) => {
    res.value[dictType] = [];
    const dicts = useDictStore().getDict(dictType);
    if (dicts) {
      res.value[dictType] = dicts;
    } else {
      await getDicts(dictType).then((resp) => {
        res.value[dictType] = resp.data.map(
          (p): DictDataOption => ({ 
            label: convertToI18nLabel(p.dictLabel, (p as any).dictLabelZh, (p as any).dictLabelEn), 
            value: p.dictValue, 
            elTagType: p.listClass, 
            elTagClass: p.cssClass 
          })
        );
        useDictStore().setDict(dictType, res.value[dictType]);
      });
    }
  });
  return res.value;
};
