"""
CITY_TO_IATA — маппинг русских названий городов → IATA-коды аэропортов.
Используется для парсинга маршрутов из заголовков рейсов Яндекс.Расписаний.
Ключи: нижний регистр (сравнение делать через .lower().strip()).
"""

CITY_TO_IATA: dict[str, str] = {
    # ── Россия ────────────────────────────────────────────────────────────────
    "москва":               "SVO",   # Шереметьево (основной)
    "москва (шереметьево)": "SVO",
    "москва (домодедово)":  "DME",
    "москва (внуково)":     "VKO",
    "москва (жуковский)":   "ZIA",
    "шереметьево":          "SVO",
    "домодедово":           "DME",
    "внуково":              "VKO",
    "жуковский":            "ZIA",
    "санкт-петербург":      "LED",
    "петербург":            "LED",
    "питер":                "LED",
    "пулково":              "LED",
    "новосибирск":          "OVB",
    "екатеринбург":         "SVX",
    "казань":               "KZN",
    "сочи":                 "AER",
    "адлер":                "AER",
    "краснодар":            "KRR",
    "уфа":                  "UFA",
    "ростов-на-дону":       "ROV",
    "пермь":                "PEE",
    "воронеж":              "VOZ",
    "самара":               "KUF",
    "омск":                 "OMS",
    "челябинск":            "CEK",
    "красноярск":           "KJA",
    "иркутск":              "IKT",
    "владивосток":          "VVO",
    "нижний новгород":      "GOJ",
    "хабаровск":            "KHV",
    "тюмень":               "TJM",
    "барнаул":              "BAX",
    "томск":                "TOF",
    "кемерово":             "KEJ",
    "новокузнецк":          "NOZ",
    "якутск":               "YKS",
    "магадан":              "GDX",
    "петропавловск-камчатский": "PKC",
    "южно-сахалинск":       "UUS",
    "мурманск":             "MMK",
    "архангельск":          "ARH",
    "астрахань":            "ASF",
    "волгоград":            "VOG",
    "саратов":              "RTW",
    "оренбург":             "REN",
    "ставрополь":           "STW",
    "минеральные воды":     "MRV",
    "нальчик":              "NAL",
    "владикавказ":          "OGZ",
    "махачкала":            "MCX",
    "грозный":              "GRV",
    "симферополь":          "SIP",
    "калининград":          "KGD",
    "псков":                "PKV",
    "великий новгород":     "NNV",
    "вологда":              "VGD",
    "ярославль":            "IAR",
    "иваново":              "IWA",
    "тверь":                "KLD",
    "рязань":               "RZN",
    "липецк":               "LPK",
    "белгород":             "EGO",
    "курск":                "URS",
    "брянск":               "BZK",
    "смоленск":             "LNX",
    "тула":                 "TYA",
    "калуга":               "KLF",
    "орёл":                 "OEL",
    "тамбов":               "TBW",
    "пенза":                "PEZ",
    "ульяновск":            "ULV",
    "нижнекамск":           "NBC",
    "чебоксары":            "CSY",
    "йошкар-ола":           "JOK",
    "саранск":              "SKX",
    "киров":                "KVX",
    "сыктывкар":            "SCW",
    "ухта":                 "UCT",
    "нарьян-мар":           "NNM",
    "воркута":              "VKT",
    "салехард":             "SLY",
    "ханты-мансийск":       "HMA",
    "сургут":               "SGC",
    "нижневартовск":        "NJC",
    "ноябрьск":             "NOJ",
    "новый уренгой":        "NUX",
    "надым":                "NYM",
    "нефтеюганск":          "NFG",
    "когалым":              "KGP",
    "стрежевой":            "SWT",
    "горно-алтайск":        "RGK",
    "абакан":               "ABA",
    "кызыл":                "KYZ",
    "улан-удэ":             "UUD",
    "чита":                 "HTA",
    "благовещенск":         "BQS",
    "комсомольск-на-амуре": "KXK",
    "николаевск-на-амуре":  "NLI",
    "магнитогорск":         "MQF",
    "нижний тагил":         "NTL",
    "курган":               "KRO",
    "тобольск":             "TOX",
    "ижевск":               "IJK",
    "нижнеудинск":          "NER",
    "братск":               "BTK",
    "усть-илимск":          "UIK",
    "бодайбо":              "ODO",
    "мирный":               "MJZ",
    "нерюнгри":             "NER",
    "анадырь":              "DYR",
    "провидения":           "PVS",
    "певек":                "PWE",
    "тикси":                "IKS",
    "черский":              "CYX",
    "хандыга":              "HTG",
    "усть-нера":            "USR",
    "сусуман":              "SUY",
    "сеймчан":              "SEK",
    "зырянка":              "ZYR",
    "среднеколымск":        "SEK",
    "беслан":               "OGZ",
    "элиста":               "ESL",
    "астрахань":            "ASF",
    "геленджик":            "GDZ",
    "анапа":                "AAQ",
    "темрюк":               "TBW",
    "ейск":                 "EIK",
    "майкоп":               "DJU",

    # ── СНГ / постсоветское пространство ─────────────────────────────────────
    "минск":                "MSQ",
    "алматы":               "ALA",
    "нур-султан":           "NQZ",
    "астана":               "NQZ",
    "ташкент":              "TAS",
    "баку":                 "GYD",
    "ереван":               "EVN",
    "тбилиси":              "TBS",
    "бишкек":               "FRU",
    "душанбе":              "DYU",
    "ашхабад":              "ASB",
    "самарканд":            "SKD",
    "ургенч":               "UGC",
    "фергана":              "FEG",
    "андижан":              "AZN",
    "навои":                "NVI",
    "актобе":               "AKX",
    "актау":                "SCO",
    "атырау":               "GUW",
    "шымкент":              "CIT",
    "павлодар":             "PWQ",
    "усть-каменогорск":     "UKK",
    "семей":                "PLX",
    "костанай":             "KSN",
    "кокшетау":             "KOV",
    "тараз":                "DMB",
    "кызылорда":            "KZO",
    "уральск":              "URA",
    "туркестан":            "HSA",
    "киев":                 "KBP",
    "одесса":               "ODS",
    "харьков":              "HRK",
    "львов":                "LWO",
    "кишинёв":              "KIV",
    "кишинев":              "KIV",
    "рига":                 "RIX",
    "таллин":               "TLL",
    "вильнюс":              "VNO",
    "ашгабат":              "ASB",

    # ── Популярные зарубежные направления ─────────────────────────────────────
    # Турция
    "стамбул":              "IST",
    "анкара":               "ESB",
    "анталья":              "AYT",
    "анталия":              "AYT",
    "бодрум":               "BJV",
    "даламан":              "DLM",
    "измир":                "ADB",
    "трабзон":              "TZX",
    # ОАЭ
    "дубай":                "DXB",
    "абу-даби":             "AUH",
    "шарджа":               "SHJ",
    # Египет
    "каир":                 "CAI",
    "хургада":              "HRG",
    "шарм-эль-шейх":        "SSH",
    "шарм эль шейх":        "SSH",
    # Таиланд
    "бангкок":              "BKK",
    "пхукет":               "HKT",
    "самуи":                "USM",
    "паттайя":              "UTP",
    # Европа
    "париж":                "CDG",
    "лондон":               "LHR",
    "берлин":               "BER",
    "рим":                  "FCO",
    "милан":                "MXP",
    "барселона":            "BCN",
    "мадрид":               "MAD",
    "вена":                 "VIE",
    "прага":                "PRG",
    "варшава":              "WAW",
    "амстердам":            "AMS",
    "брюссель":             "BRU",
    "цюрих":                "ZRH",
    "женева":               "GVA",
    "франкфурт":            "FRA",
    "мюнхен":               "MUC",
    "гамбург":              "HAM",
    "дюссельдорф":          "DUS",
    "стокгольм":            "ARN",
    "копенгаген":           "CPH",
    "осло":                 "OSL",
    "хельсинки":            "HEL",
    "будапешт":             "BUD",
    "бухарест":             "OTP",
    "афины":                "ATH",
    "лиссабон":             "LIS",
    "дублин":               "DUB",
    "лимасол":              "LCA",
    "ларнака":              "LCA",
    "никосия":              "LCA",
    "белград":              "BEG",
    "загреб":               "ZAG",
    "любляна":              "LJU",
    "скопье":               "SKP",
    "тирана":               "TIA",
    "подгорица":            "TGD",
    "сараево":              "SJJ",
    "черногория":           "TIV",
    "тиват":                "TIV",
    "дубровник":            "DBV",
    "сплит":                "SPU",
    "пула":                 "PUY",
    "задар":                "ZAD",
    "хорватия":             "ZAG",
    # Азия
    "токио":                "NRT",
    "осака":                "KIX",
    "сеул":                 "ICN",
    "пекин":                "PEK",
    "шанхай":               "PVG",
    "гонконг":              "HKG",
    "сингапур":             "SIN",
    "куала-лумпур":         "KUL",
    "джакарта":             "CGK",
    "бали":                 "DPS",
    "манила":               "MNL",
    "ханой":                "HAN",
    "хошимин":              "SGN",
    "коломбо":              "CMB",
    "мале":                 "MLE",
    "катманду":             "KTM",
    "дели":                 "DEL",
    "мумбаи":               "BOM",
    "бомбей":               "BOM",
    "карачи":               "KHI",
    "лахор":                "LHE",
    "исламабад":            "ISB",
    "тегеран":              "IKA",
    "маскат":               "MCT",
    "доха":                 "DOH",
    "кувейт":               "KWI",
    "амман":                "AMM",
    "бейрут":               "BEY",
    "тель-авив":            "TLV",
    "тель авив":            "TLV",
    # Африка
    "найроби":              "NBO",
    "аддис-абеба":          "ADD",
    "йоханнесбург":         "JNB",
    "касабланка":           "CMN",
    "тунис":                "TUN",
    # Америка
    "нью-йорк":             "JFK",
    "нью йорк":             "JFK",
    "лос-анджелес":         "LAX",
    "лос анджелес":         "LAX",
    "майами":               "MIA",
    "чикаго":               "ORD",
    "торонто":              "YYZ",
    "ванкувер":             "YVR",
    "монреаль":             "YUL",
    "мехико":               "MEX",
    "гавана":               "HAV",
    "канкун":               "CUN",
    "лима":                 "LIM",
    "богота":               "BOG",
    "сан-паулу":            "GRU",
    "буэнос-айрес":         "EZE",
    "сантьяго":             "SCL",
    # Австралия/Океания
    "сидней":               "SYD",
    "мельбурн":             "MEL",
    "перт":                 "PER",
    "брисбен":              "BNE",
    # Дополнительные российские города
    "читать":               "HTA",
    "нефтекамск":           "UUA",
    "березники":            "PEE",
    "стерлитамак":          "UFA",
    "тольятти":             "KUF",
    "рыбинск":              "IAR",
    "дзержинск":            "GOJ",
    "владимир":             "VKO",
    "кострома":             "KMW",
    "орск":                 "OSW",
    "нижний тагил":         "NTL",
    "асбест":               "SVX",
    "нижневартовск":        "NJC",
    "мегион":               "NFG",
    "лангепас":             "KGP",
    "лысьва":               "PEE",
    "краснотурьинск":       "SVX",
    "серов":                "SVX",
    "первоуральск":         "SVX",
    "каменск-уральский":    "SVX",
}


def get_iata(city_name: str) -> str | None:
    """Возвращает IATA-код по русскому названию города (регистронезависимо)."""
    return CITY_TO_IATA.get(city_name.lower().strip())
