export interface RegionDistrict {
  value: string;
  labelUz: string;
  labelRu: string;
}

export interface UzbekRegion {
  value: string;
  labelUz: string;
  labelRu: string;
  districts: RegionDistrict[];
}

/** Uzbekistan regions (viloyat) and districts for cascading pickers. */
export const UZ_REGIONS: UzbekRegion[] = [
  {
    value: "tashkent_city",
    labelUz: "Toshkent shahri",
    labelRu: "г. Ташкент",
    districts: [
      { value: "yashnobod", labelUz: "Yashnobod tumani", labelRu: "Яшнабадский район" },
      { value: "chilonzor", labelUz: "Chilonzor tumani", labelRu: "Чиланзарский район" },
      { value: "yunusobod", labelUz: "Yunusobod tumani", labelRu: "Юнусабадский район" },
      { value: "mirzo_ulugbek", labelUz: "Mirzo Ulug'bek tumani", labelRu: "Мирзо-Улугбекский район" },
      { value: "sergeli", labelUz: "Sergeli tumani", labelRu: "Сергелийский район" },
      { value: "olmazor", labelUz: "Olmazor tumani", labelRu: "Алмазарский район" },
      { value: "uchtepa", labelUz: "Uchtepa tumani", labelRu: "Учтепинский район" },
      { value: "shayxontohur", labelUz: "Shayxontohur tumani", labelRu: "Шайхантахурский район" },
      { value: "yakkasaroy", labelUz: "Yakkasaroy tumani", labelRu: "Яккасарайский район" },
      { value: "bektemir", labelUz: "Bektemir tumani", labelRu: "Бектемирский район" },
      { value: "yangihayot", labelUz: "Yangihayot tumani", labelRu: "Янгихаётский район" },
      { value: "mirobod", labelUz: "Mirobod tumani", labelRu: "Мирабадский район" },
    ],
  },
  {
    value: "tashkent_region",
    labelUz: "Toshkent viloyati",
    labelRu: "Ташкентская область",
    districts: [
      { value: "zangiota", labelUz: "Zangiota tumani", labelRu: "Зангиатинский район" },
      { value: "qibray", labelUz: "Qibray tumani", labelRu: "Кибрайский район" },
      { value: "parkent", labelUz: "Parkent tumani", labelRu: "Паркентский район" },
      { value: "boka", labelUz: "Bo'ka tumani", labelRu: "Букинский район" },
      { value: "chirchiq", labelUz: "Chirchiq shahri", labelRu: "г. Чирчик" },
      { value: "olmaliq", labelUz: "Olmaliq shahri", labelRu: "г. Алмалык" },
      { value: "angren", labelUz: "Angren shahri", labelRu: "г. Ангрен" },
    ],
  },
  {
    value: "andijan",
    labelUz: "Andijon viloyati",
    labelRu: "Андижанская область",
    districts: [
      { value: "andijan_city", labelUz: "Andijon shahri", labelRu: "г. Андижан" },
      { value: "asaka", labelUz: "Asaka tumani", labelRu: "Асакинский район" },
      { value: "shahrixon", labelUz: "Shahrixon tumani", labelRu: "Шахриханский район" },
      { value: "baliqchi", labelUz: "Baliqchi tumani", labelRu: "Балыкчинский район" },
      { value: "marhamat", labelUz: "Marhamat tumani", labelRu: "Мархаматский район" },
    ],
  },
  {
    value: "bukhara",
    labelUz: "Buxoro viloyati",
    labelRu: "Бухарская область",
    districts: [
      { value: "bukhara_city", labelUz: "Buxoro shahri", labelRu: "г. Бухара" },
      { value: "gijduvon", labelUz: "G'ijduvon tumani", labelRu: "Гиждуванский район" },
      { value: "kogon", labelUz: "Kogon tumani", labelRu: "Каганский район" },
      { value: "romitan", labelUz: "Romitan tumani", labelRu: "Ромитанский район" },
      { value: "shofirkon", labelUz: "Shofirkon tumani", labelRu: "Шафирканский район" },
    ],
  },
  {
    value: "fergana",
    labelUz: "Farg'ona viloyati",
    labelRu: "Ферганская область",
    districts: [
      { value: "fergana_city", labelUz: "Farg'ona shahri", labelRu: "г. Фергана" },
      { value: "margilon", labelUz: "Marg'ilon shahri", labelRu: "г. Маргилан" },
      { value: "quva", labelUz: "Quva tumani", labelRu: "Кувинский район" },
      { value: "rishton", labelUz: "Rishton tumani", labelRu: "Риштанский район" },
      { value: "beshariq", labelUz: "Beshariq tumani", labelRu: "Бешарыкский район" },
    ],
  },
  {
    value: "jizzakh",
    labelUz: "Jizzax viloyati",
    labelRu: "Джизакская область",
    districts: [
      { value: "jizzakh_city", labelUz: "Jizzax shahri", labelRu: "г. Джизак" },
      { value: "gallaorol", labelUz: "Gallaorol tumani", labelRu: "Галляаральский район" },
      { value: "zarbdor", labelUz: "Zarbdor tumani", labelRu: "Зарбдарский район" },
      { value: "pakhtakor", labelUz: "Paxtakor tumani", labelRu: "Пахтакорский район" },
    ],
  },
  {
    value: "khorezm",
    labelUz: "Xorazm viloyati",
    labelRu: "Хорезмская область",
    districts: [
      { value: "urgench", labelUz: "Urganch shahri", labelRu: "г. Ургенч" },
      { value: "xiva", labelUz: "Xiva shahri", labelRu: "г. Хива" },
      { value: "shovot", labelUz: "Shovot tumani", labelRu: "Шаватский район" },
      { value: "yangiariq", labelUz: "Yangiariq tumani", labelRu: "Янгиарыкский район" },
    ],
  },
  {
    value: "namangan",
    labelUz: "Namangan viloyati",
    labelRu: "Наманганская область",
    districts: [
      { value: "namangan_city", labelUz: "Namangan shahri", labelRu: "г. Наманган" },
      { value: "chortoq", labelUz: "Chortoq tumani", labelRu: "Чартакский район" },
      { value: "chust", labelUz: "Chust tumani", labelRu: "Чустский район" },
      { value: "pop", labelUz: "Pop tumani", labelRu: "Папский район" },
    ],
  },
  {
    value: "navoi",
    labelUz: "Navoiy viloyati",
    labelRu: "Навоийская область",
    districts: [
      { value: "navoi_city", labelUz: "Navoiy shahri", labelRu: "г. Навои" },
      { value: "zarafshon", labelUz: "Zarafshon shahri", labelRu: "г. Зарафшан" },
      { value: "karmana", labelUz: "Karmana tumani", labelRu: "Карманинский район" },
      { value: "nurota", labelUz: "Nurota tumani", labelRu: "Нуратинский район" },
    ],
  },
  {
    value: "kashkadarya",
    labelUz: "Qashqadaryo viloyati",
    labelRu: "Кашкадарьинская область",
    districts: [
      { value: "qarshi", labelUz: "Qarshi shahri", labelRu: "г. Карши" },
      { value: "shahrisabz", labelUz: "Shahrisabz shahri", labelRu: "г. Шахрисабз" },
      { value: "kitob", labelUz: "Kitob tumani", labelRu: "Китабский район" },
      { value: "muborak", labelUz: "Muborak tumani", labelRu: "Мубарекский район" },
    ],
  },
  {
    value: "samarkand",
    labelUz: "Samarqand viloyati",
    labelRu: "Самаркандская область",
    districts: [
      { value: "samarkand_city", labelUz: "Samarqand shahri", labelRu: "г. Самарканд" },
      { value: "kattaqorgon", labelUz: "Kattaqo'rg'on shahri", labelRu: "г. Каттакурган" },
      { value: "urgut", labelUz: "Urgut tumani", labelRu: "Ургутский район" },
      { value: "payariq", labelUz: "Payariq tumani", labelRu: "Пайарыкский район" },
      { value: "narpay", labelUz: "Narpay tumani", labelRu: "Нарпайский район" },
    ],
  },
  {
    value: "sirdarya",
    labelUz: "Sirdaryo viloyati",
    labelRu: "Сырдарьинская область",
    districts: [
      { value: "guliston", labelUz: "Guliston shahri", labelRu: "г. Гулистан" },
      { value: "yangiyer", labelUz: "Yangiyer shahri", labelRu: "г. Янгиер" },
      { value: "sardoba", labelUz: "Sardoba tumani", labelRu: "Сардобинский район" },
      { value: "boyovut", labelUz: "Boyovut tumani", labelRu: "Баяутский район" },
    ],
  },
  {
    value: "surkhandarya",
    labelUz: "Surxondaryo viloyati",
    labelRu: "Сурхандарьинская область",
    districts: [
      { value: "termez", labelUz: "Termiz shahri", labelRu: "г. Термез" },
      { value: "denov", labelUz: "Denov tumani", labelRu: "Денауский район" },
      { value: "sherobod", labelUz: "Sherobod tumani", labelRu: "Шерабадский район" },
      { value: "jarqorgon", labelUz: "Jarqo'rg'on tumani", labelRu: "Джаркурганский район" },
    ],
  },
  {
    value: "karakalpakstan",
    labelUz: "Qoraqalpog'iston Respublikasi",
    labelRu: "Республика Каракалпакстан",
    districts: [
      { value: "nukus", labelUz: "Nukus shahri", labelRu: "г. Нукус" },
      { value: "xojayli", labelUz: "Xo'jayli tumani", labelRu: "Ходжейлийский район" },
      { value: "chimboy", labelUz: "Chimboy tumani", labelRu: "Чимбайский район" },
      { value: "mo'ynoq", labelUz: "Mo'ynoq tumani", labelRu: "Муйнакский район" },
    ],
  },
];

export function getRegionByValue(value: string): UzbekRegion | undefined {
  return UZ_REGIONS.find((r) => r.value === value);
}

export function getDistrictLabel(
  districtValue: string,
  locale: string = "uz",
): string | undefined {
  for (const region of UZ_REGIONS) {
    const district = region.districts.find((d) => d.value === districtValue);
    if (district) return locale === "ru" ? district.labelRu : district.labelUz;
  }
  return undefined;
}

export function getRegionLabel(regionValue: string, locale: string = "uz"): string | undefined {
  const region = getRegionByValue(regionValue);
  if (!region) return undefined;
  return locale === "ru" ? region.labelRu : region.labelUz;
}

export function findRegionForDistrict(districtValue: string): string | undefined {
  for (const region of UZ_REGIONS) {
    if (region.districts.some((d) => d.value === districtValue)) {
      return region.value;
    }
  }
  return undefined;
}
