import type { DicOpt } from './types';

import { ref } from 'vue';

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

export const PUBLISH_STATUS_OPTIONS = ref<DicOpt[]>([]);
export const TASK_CATEGORY_OPTIONS = ref<DicOpt[]>([]);
export const TASK_KIND_OPTIONS = ref<DicOpt[]>([]);
export const SOURCE_TYPE_OPTIONS = ref<DicOpt[]>([]);
export const TRAIN_MODE_OPTIONS = ref<DicOpt[]>([]);
export const EVAL_MODE_OPTIONS = ref<DicOpt[]>([]);
export const PERSON_STATUS_OPTIONS = ref<DicOpt[]>([]);
export const YES_NO_OPTIONS = ref<TmsDicOpt[]>([]);
export const PASS_FLAG_OPTIONS = ref<TmsDicOpt[]>([]);

export async function loadTaskDics() {
  const baseStore = useBaseStore();
  const [publish, category, kind, source, train, evalMode, person, yesNo, passFlag] =
    await Promise.all([
      loadTmsDic(baseStore, TMS_DIC.taskPublishStatus),
      loadTmsDic(baseStore, TMS_DIC.taskCategory),
      loadTmsDic(baseStore, TMS_DIC.taskKind),
      loadTmsDic(baseStore, TMS_DIC.taskSourceType),
      loadTmsDic(baseStore, TMS_DIC.trainMode),
      loadTmsDic(baseStore, TMS_DIC.evalMode),
      loadTmsDic(baseStore, TMS_DIC.personTaskStatus),
      loadTmsDic(baseStore, TMS_DIC.yesNo),
      loadTmsDic(baseStore, TMS_DIC.passFlag),
    ]);
  PUBLISH_STATUS_OPTIONS.value = publish;
  TASK_CATEGORY_OPTIONS.value = category;
  TASK_KIND_OPTIONS.value = kind;
  SOURCE_TYPE_OPTIONS.value = source;
  TRAIN_MODE_OPTIONS.value = train;
  EVAL_MODE_OPTIONS.value = evalMode;
  PERSON_STATUS_OPTIONS.value = person;
  YES_NO_OPTIONS.value = yesNo;
  PASS_FLAG_OPTIONS.value = passFlag;
}

export function labelOfPublishStatus(v?: string) {
  return labelOfDic(PUBLISH_STATUS_OPTIONS.value, v);
}
export function labelOfCategory(v?: string) {
  return labelOfDic(TASK_CATEGORY_OPTIONS.value, v);
}
export function labelOfSourceType(v?: string) {
  return labelOfDic(SOURCE_TYPE_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 labelOfTaskKind(v?: string) {
  return labelOfDic(TASK_KIND_OPTIONS.value, v);
}
export function labelOfPersonStatus(v?: string) {
  return labelOfDic(PERSON_STATUS_OPTIONS.value, v);
}
export function labelOfPassFlag(v?: string | null) {
  return labelOfPassFlagOpts(PASS_FLAG_OPTIONS.value, v);
}

export function publishStatusColor(status?: string) {
  switch (status) {
    case 'draft':
      return 'default';
    case 'published':
      return 'processing';
    case 'done':
      return 'success';
    case 'cancelled':
      return 'error';
    default:
      return 'default';
  }
}
