export interface DamageVocabulary {
  damage_types_ordered: string[];
  exterior_selectable: string[];
  salon_selectable: string[];
  severity_scale: {
    positions: number;
    labels: string[];
    values: number[];
    default: string;
  };
}

let cache: DamageVocabulary | null = null;

export async function loadDamageVocabulary(): Promise<DamageVocabulary> {
  if (cache) return cache;
  const res = await fetch("/data/damage_vocabulary.json");
  const data = await res.json();
  cache = {
    damage_types_ordered: data.damage_types_ordered,
    exterior_selectable: data.exterior_selectable,
    salon_selectable: data.salon_selectable,
    severity_scale: data.severity_scale,
  };
  return cache;
}

/**
 * Mapping русского названия из damage_vocabulary.json в DamageType enum
 * нашего backend'а (см. mechanic_schemas.DamageType Literal).
 * Возвращает null для типов которым нет точного соответствия —
 * вызывающий код должен такие отфильтровать из UI.
 */
export const DAMAGE_RU_TO_ENUM: Record<string, string | null> = {
  "Вмятина": "dent",
  "Царапина": "scratch",
  "Трещина": "crack",
  "Повреждено": "damaged",
  "Скол": "chip",
  "Отсутствует": "missing",
  "Прожжено": "burn",
  "Погнуто": "bent",
  "Требуется мойка": null,
  "Не работает": "not-working",
  "Порез": "cut",
  "Прокол": "puncture",
  "Порвано": "torn",
  "Пятна": "stain",
  "Грязный салон": "stain",
  "Запах табака": null,
  "Повреждение салонных ковриков": "damaged",
  "Повреждение обшивки дверей": "damaged",
  "Сломанные ручки": "damaged",
  "Установлено": "removed",
  "Снято": "removed",
  "Контроль": null,
  "Требуется химчистка": "stain",
  "Затертость": "scuff",
  "Грыжа": "bulge",
  "Штат": null,
};

export function damageTypeRuToEnum(ru: string): string | null {
  return DAMAGE_RU_TO_ENUM[ru] ?? null;
}
