import { ref } from 'vue';

import { useBaseStore } from '#/store';
import {
  TMS_DIC,
  labelOfDic,
  labelOfPassFlagOpts,
  labelOfYesNoOpts,
  loadTmsDic,
  type TmsDicOpt,
} from '#/views/x/tms/shared/dic';

export const PERSON_STATUS_OPTIONS = ref<TmsDicOpt[]>([]);
export const TRAIN_MODE_OPTIONS = ref<TmsDicOpt[]>([]);
export const EVAL_MODE_OPTIONS = ref<TmsDicOpt[]>([]);
export const CATEGORY_OPTIONS = ref<TmsDicOpt[]>([]);
export const YES_NO_OPTIONS = ref<TmsDicOpt[]>([]);
export const PASS_FLAG_OPTIONS = ref<TmsDicOpt[]>([]);
export const PASS_FLAG_QUERY_OPTIONS = ref<TmsDicOpt[]>([]);

export async function loadPersonTaskDics() {
  const baseStore = useBaseStore();
  const [status, trainMode, evalMode, category, yesNo, passFlag] = await Promise.all([
    loadTmsDic(baseStore, TMS_DIC.personTaskStatus),
    loadTmsDic(baseStore, TMS_DIC.trainMode),
    loadTmsDic(baseStore, TMS_DIC.evalMode),
    loadTmsDic(baseStore, TMS_DIC.taskCategory),
    loadTmsDic(baseStore, TMS_DIC.yesNo),
    loadTmsDic(baseStore, TMS_DIC.passFlag),
  ]);
  PERSON_STATUS_OPTIONS.value = status;
  TRAIN_MODE_OPTIONS.value = trainMode;
  EVAL_MODE_OPTIONS.value = evalMode;
  CATEGORY_OPTIONS.value = category;
  YES_NO_OPTIONS.value = yesNo;
  PASS_FLAG_OPTIONS.value = passFlag;
  PASS_FLAG_QUERY_OPTIONS.value = [
    ...passFlag.map((x) => ({ ...x, enCode: x.enCode || x.id })),
    { id: 'none', enCode: 'none', fullName: '未出结果' },
  ];
}

export function labelOfPersonStatus(v?: string) {
  return labelOfDic(PERSON_STATUS_OPTIONS.value, v);
}

export function labelOfTrainMode(v?: string) {
  return labelOfDic(TRAIN_MODE_OPTIONS.value, v);
}

export function labelOfEvalMode(v?: string) {
  return labelOfDic(EVAL_MODE_OPTIONS.value, v);
}

export function labelOfCategory(v?: string) {
  return labelOfDic(CATEGORY_OPTIONS.value, v);
}

export function labelOfYesNo(v?: boolean | string | null) {
  return labelOfYesNoOpts(YES_NO_OPTIONS.value, v);
}

export function labelOfPassFlag(v?: string | null) {
  return labelOfPassFlagOpts(PASS_FLAG_OPTIONS.value, v);
}
