# Language dict
language_code_to_name = {
    "afr": "Afrikaans",
    "amh": "Amharic",
    "arb": "Modern Standard Arabic",
    "ary": "Moroccan Arabic",
    "arz": "Egyptian Arabic",
    "asm": "Assamese",
    "ast": "Asturian",
    "azj": "North Azerbaijani",
    "bel": "Belarusian",
    "ben": "Bengali",
    "bos": "Bosnian",
    "bul": "Bulgarian",
    "cat": "Catalan",
    "ceb": "Cebuano",
    "ces": "Czech",
    "ckb": "Central Kurdish",
    "cmn": "Mandarin Chinese",
    "cym": "Welsh",
    "dan": "Danish",
    "deu": "German",
    "ell": "Greek",
    "eng": "English",
    "est": "Estonian",
    "eus": "Basque",
    "fin": "Finnish",
    "fra": "French",
    "gaz": "West Central Oromo",
    "gle": "Irish",
    "glg": "Galician",
    "guj": "Gujarati",
    "heb": "Hebrew",
    "hin": "Hindi",
    "hrv": "Croatian",
    "hun": "Hungarian",
    "hye": "Armenian",
    "ibo": "Igbo",
    "ind": "Indonesian",
    "isl": "Icelandic",
    "ita": "Italian",
    "jav": "Javanese",
    "jpn": "Japanese",
    "kam": "Kamba",
    "kan": "Kannada",
    "kat": "Georgian",
    "kaz": "Kazakh",
    "kea": "Kabuverdianu",
    "khk": "Halh Mongolian",
    "khm": "Khmer",
    "kir": "Kyrgyz",
    "kor": "Korean",
    "lao": "Lao",
    "lit": "Lithuanian",
    "ltz": "Luxembourgish",
    "lug": "Ganda",
    "luo": "Luo",
    "lvs": "Standard Latvian",
    "mai": "Maithili",
    "mal": "Malayalam",
    "mar": "Marathi",
    "mkd": "Macedonian",
    "mlt": "Maltese",
    "mni": "Meitei",
    "mya": "Burmese",
    "nld": "Dutch",
    "nno": "Norwegian Nynorsk",
    "nob": "Norwegian Bokm\u00e5l",
    "npi": "Nepali",
    "nya": "Nyanja",
    "oci": "Occitan",
    "ory": "Odia",
    "pan": "Punjabi",
    "pbt": "Southern Pashto",
    "pes": "Western Persian",
    "pol": "Polish",
    "por": "Portuguese",
    "ron": "Romanian",
    "rus": "Russian",
    "slk": "Slovak",
    "slv": "Slovenian",
    "sna": "Shona",
    "snd": "Sindhi",
    "som": "Somali",
    "spa": "Spanish",
    "srp": "Serbian",
    "swe": "Swedish",
    "swh": "Swahili",
    "tam": "Tamil",
    "tel": "Telugu",
    "tgk": "Tajik",
    "tgl": "Tagalog",
    "tha": "Thai",
    "tur": "Turkish",
    "ukr": "Ukrainian",
    "urd": "Urdu",
    "uzn": "Northern Uzbek",
    "vie": "Vietnamese",
    "xho": "Xhosa",
    "yor": "Yoruba",
    "yue": "Cantonese",
    "zlm": "Colloquial Malay",
    "zsm": "Standard Malay",
    "zul": "Zulu",
}
LANGUAGE_NAME_TO_CODE = {v: k for k, v in language_code_to_name.items()}

ISO_639_1_TO_3 = {
    'aa': 'aar',
    'ab': 'abk',
    'ae': 'ave',
    'af': 'afr',
    'ak': 'aka',
    'am': 'amh',
    'an': 'arg',
    'ar': 'ara',
    'as': 'asm',
    'av': 'ava',
    'ay': 'aym',
    'az': 'aze',
    'ba': 'bak',
    'be': 'bel',
    'bg': 'bul',
    'bi': 'bis',
    'bm': 'bam',
    'bn': 'ben',
    'bo': 'bod',
    'br': 'bre',
    'bs': 'bos',
    'ca': 'cat',
    'ce': 'che',
    'ch': 'cha',
    'co': 'cos',
    'cr': 'cre',
    'cs': 'ces',
    'cu': 'chu',
    'cv': 'chv',
    'cy': 'cym',
    'da': 'dan',
    'de': 'deu',
    'dv': 'div',
    'dz': 'dzo',
    'ee': 'ewe',
    'el': 'ell',
    'en': 'eng',
    'eo': 'epo',
    'es': 'spa',
    'et': 'est',
    'eu': 'eus',
    'fa': 'fas',
    'ff': 'ful',
    'fi': 'fin',
    'fj': 'fij',
    'fo': 'fao',
    'fr': 'fra',
    'fy': 'fry',
    'ga': 'gle',
    'gd': 'gla',
    'gl': 'glg',
    'gn': 'grn',
    'gu': 'guj',
    'gv': 'glv',
    'ha': 'hau',
    'he': 'heb',
    'hi': 'hin',
    'ho': 'hmo',
    'hr': 'hrv',
    'ht': 'hat',
    'hu': 'hun',
    'hy': 'hye',
    'hz': 'her',
    'ia': 'ina',
    'id': 'ind',
    'ie': 'ile',
    'ig': 'ibo',
    'ii': 'iii',
    'ik': 'ipk',
    'io': 'ido',
    'is': 'isl',
    'it': 'ita',
    'iu': 'iku',
    'ja': 'jpn',
    'jv': 'jav',
    'ka': 'kat',
    'kg': 'kon',
    'ki': 'kik',
    'kj': 'kua',
    'kk': 'kaz',
    'kl': 'kal',
    'km': 'khm',
    'kn': 'kan',
    'ko': 'kor',
    'kr': 'kau',
    'ks': 'kas',
    'ku': 'kur',
    'kv': 'kom',
    'kw': 'cor',
    'ky': 'kir',
    'la': 'lat',
    'lb': 'ltz',
    'lg': 'lug',
    'li': 'lim',
    'ln': 'lin',
    'lo': 'lao',
    'lt': 'lit',
    'lu': 'lub',
    'lv': 'lav',
    'mg': 'mlg',
    'mh': 'mah',
    'mi': 'mri',
    'mk': 'mkd',
    'ml': 'mal',
    'mn': 'mon',
    'mr': 'mar',
    'ms': 'msa',
    'mt': 'mlt',
    'my': 'mya',
    'na': 'nau',
    'nb': 'nob',
    'nd': 'nde',
    'ne': 'nep',
    'ng': 'ndo',
    'nl': 'nld',
    'nn': 'nno',
    'no': 'nor',
    'nr': 'nbl',
    'nv': 'nav',
    'ny': 'nya',
    'oc': 'oci',
    'oj': 'oji',
    'om': 'orm',
    'or': 'ori',
    'os': 'oss',
    'pa': 'pan',
    'pi': 'pli',
    'pl': 'pol',
    'ps': 'pus',
    'pt': 'por',
    'qu': 'que',
    'rm': 'roh',
    'rn': 'run',
    'ro': 'ron',
    'ru': 'rus',
    'rw': 'kin',
    'sa': 'san',
    'sc': 'srd',
    'sd': 'snd',
    'se': 'sme',
    'sg': 'sag',
    'sh': 'hbs',
    'si': 'sin',
    'sk': 'slk',
    'sl': 'slv',
    'sm': 'smo',
    'sn': 'sna',
    'so': 'som',
    'sq': 'sqi',
    'sr': 'srp',
    'ss': 'ssw',
    'st': 'sot',
    'su': 'sun',
    'sv': 'swe',
    'sw': 'swa',
    'ta': 'tam',
    'te': 'tel',
    'tg': 'tgk',
    'th': 'tha',
    'ti': 'tir',
    'tk': 'tuk',
    'tl': 'tgl',
    'tn': 'tsn',
    'to': 'ton',
    'tr': 'tur',
    'ts': 'tso',
    'tt': 'tat',
    'tw': 'twi',
    'ty': 'tah',
    'ug': 'uig',
    'uk': 'ukr',
    'ur': 'urd',
    'uz': 'uzb',
    've': 'ven',
    'vi': 'vie',
    'vo': 'vol',
    'wa': 'wln',
    'wo': 'wol',
    'xh': 'xho',
    'yi': 'yid',
    'yo': 'yor',
    'za': 'zha',
    'zh': 'zho',
    'zu': 'zul'}

iso639_3_to_1 = {
  "aae": "sq",
  "aao": "ar",
  "aar": "aa",
  "aat": "sq",
  "abh": "ar",
  "abk": "ab",
  "abv": "ar",
  "acm": "ar",
  "acq": "ar",
  "acw": "ar",
  "acx": "ar",
  "acy": "ar",
  "adf": "ar",
  "aeb": "ar",
  "aec": "ar",
  "afb": "ar",
  "afr": "af",
  "ajp": "ar",
  "aka": "ak",
  "aln": "sq",
  "als": "sq",
  "amh": "am",
  "apc": "ar",
  "apd": "ar",
  "ara": "ar",
  "arb": "ar",
  "arg": "an",
  "arq": "ar",
  "ars": "ar",
  "ary": "ar",
  "arz": "ar",
  "asm": "as",
  "auz": "ar",
  "ava": "av",
  "ave": "ae",
  "avl": "ar",
  "ayc": "ar",
  "ayh": "ar",
  "ayl": "ar",
  "aym": "ay",
  "ayn": "ar",
  "ayp": "ar",
  "ayr": "ay",
  "azb": "az",
  "aze": "az",
  "azj": "az",
  "bak": "ba",
  "bam": "bm",
  "bbz": "ar",
  "bel": "be",
  "ben": "bn",
  "bhr": "mg",
  "bis": "bi",
  "bjn": "ms",
  "bmm": "mg",
  "bod": "bo",
  "bos": "sh",
  "bre": "br",
  "btj": "ms",
  "bul": "bg",
  "bve": "ms",
  "bvu": "ms",
  "bzc": "mg",
  "cat": "ca",
  "cdo": "zh",
  "ces": "cs",
  "cha": "ch",
  "che": "ce",
  "chu": "cu",
  "chv": "cv",
  "cjy": "zh",
  "ckb": "ku",
  "cmn": "zh",
  "coa": "ms",
  "cor": "kw",
  "cos": "co",
  "cpx": "zh",
  "cre": "cr",
  "crj": "cr",
  "crk": "cr",
  "crl": "cr",
  "crm": "cr",
  "csw": "cr",
  "cwd": "cr",
  "cym": "cy",
  "czh": "zh",
  "czo": "zh",
  "dan": "da",
  "deu": "de",
  "div": "dv",
  "dty": "ne",
  "dup": "ms",
  "dzo": "dz",
  "ekk": "et",
  "ell": "el",
  "eng": "en",
  "epo": "eo",
  "esi": "ik",
  "esk": "ik",
  "est": "et",
  "eus": "eu",
  "ewe": "ee",
  "fao": "fo",
  "fas": "fa",
  "fat": "ak",
  "ffm": "ff",
  "fij": "fj",
  "fin": "fi",
  "fra": "fr",
  "fry": "fy",
  "fub": "ff",
  "fuc": "ff",
  "fue": "ff",
  "fuf": "ff",
  "fuh": "ff",
  "fui": "ff",
  "ful": "ff",
  "fuq": "ff",
  "fuv": "ff",
  "gan": "zh",
  "gax": "om",
  "gaz": "om",
  "gla": "gd",
  "gle": "ga",
  "glg": "gl",
  "glv": "gv",
  "gnw": "gn",
  "grn": "gn",
  "gug": "gn",
  "gui": "gn",
  "guj": "gu",
  "gun": "gn",
  "hae": "om",
  "hak": "zh",
  "hat": "ht",
  "hau": "ha",
  "hbs": "sh",
  "heb": "he",
  "her": "hz",
  "hin": "hi",
  "hji": "ms",
  "hmo": "ho",
  "hrv": "hr",
  "hsn": "zh",
  "hun": "hu",
  "hye": "hy",
  "ibo": "ig",
  "ido": "io",
  "iii": "ii",
  "ike": "iu",
  "ikt": "iu",
  "iku": "iu",
  "ile": "ie",
  "ina": "ia",
  "ind": "ms",
  "ipk": "ik",
  "isl": "is",
  "ita": "it",
  "jak": "ms",
  "jav": "jv",
  "jax": "ms",
  "jpn": "ja",
  "kal": "kl",
  "kan": "kn",
  "kas": "ks",
  "kat": "ka",
  "kau": "kr",
  "kaz": "kk",
  "kby": "kr",
  "khk": "mn",
  "khm": "km",
  "kik": "ki",
  "kin": "rw",
  "kir": "ky",
  "kmr": "ku",
  "knc": "kr",
  "kng": "kg",
  "koi": "kv",
  "kom": "kv",
  "kon": "kg",
  "kor": "ko",
  "kpv": "kv",
  "krt": "kr",
  "kua": "kj",
  "kur": "ku",
  "kvb": "ms",
  "kvr": "ms",
  "kwy": "kg",
  "kxd": "ms",
  "lao": "lo",
  "lat": "la",
  "lav": "lv",
  "lce": "ms",
  "lcf": "ms",
  "ldi": "kg",
  "lim": "li",
  "lin": "ln",
  "lit": "lt",
  "liw": "ms",
  "ltg": "lv",
  "ltz": "lb",
  "lub": "lu",
  "lug": "lg",
  "lvs": "lv",
  "lzh": "zh",
  "mah": "mh",
  "mal": "ml",
  "mar": "mr",
  "max": "ms",
  "meo": "ms",
  "mfa": "ms",
  "mfb": "ms",
  "min": "ms",
  "mkd": "mk",
  "mlg": "mg",
  "mlt": "mt",
  "mnp": "zh",
  "mon": "mn",
  "mqg": "ms",
  "mri": "mi",
  "msa": "ms",
  "msh": "mg",
  "msi": "ms",
  "mui": "ms",
  "mvf": "mn",
  "mya": "my",
  "nan": "zh",
  "nau": "na",
  "nav": "nv",
  "nbl": "nr",
  "nde": "nd",
  "ndo": "ng",
  "nep": "ne",
  "nhd": "gn",
  "nld": "nl",
  "nno": "no",
  "nob": "no",
  "nor": "no",
  "npi": "ne",
  "nya": "ny",
  "oci": "oc",
  "ojb": "oj",
  "ojc": "oj",
  "ojg": "oj",
  "oji": "oj",
  "ojs": "oj",
  "ojw": "oj",
  "orc": "om",
  "ori": "or",
  "orm": "om",
  "orn": "ms",
  "ors": "ms",
  "ory": "or",
  "oss": "os",
  "otw": "oj",
  "pan": "pa",
  "pbt": "ps",
  "pbu": "ps",
  "pel": "ms",
  "pes": "fa",
  "pga": "ar",
  "pli": "pi",
  "plt": "mg",
  "pol": "pl",
  "por": "pt",
  "prs": "fa",
  "pse": "ms",
  "pst": "ps",
  "pus": "ps",
  "qub": "qu",
  "qud": "qu",
  "que": "qu",
  "quf": "qu",
  "qug": "qu",
  "quh": "qu",
  "quk": "qu",
  "qul": "qu",
  "qup": "qu",
  "qur": "qu",
  "qus": "qu",
  "quw": "qu",
  "qux": "qu",
  "quy": "qu",
  "quz": "qu",
  "qva": "qu",
  "qvc": "qu",
  "qve": "qu",
  "qvh": "qu",
  "qvi": "qu",
  "qvj": "qu",
  "qvl": "qu",
  "qvm": "qu",
  "qvn": "qu",
  "qvo": "qu",
  "qvp": "qu",
  "qvs": "qu",
  "qvw": "qu",
  "qvz": "qu",
  "qwa": "qu",
  "qwc": "qu",
  "qwh": "qu",
  "qws": "qu",
  "qxa": "qu",
  "qxc": "qu",
  "qxh": "qu",
  "qxl": "qu",
  "qxn": "qu",
  "qxo": "qu",
  "qxp": "qu",
  "qxr": "qu",
  "qxt": "qu",
  "qxu": "qu",
  "qxw": "qu",
  "roh": "rm",
  "ron": "ro",
  "run": "rn",
  "rus": "ru",
  "sag": "sg",
  "san": "sa",
  "sdc": "sc",
  "sdh": "ku",
  "sdn": "sc",
  "shu": "ar",
  "sin": "si",
  "skg": "mg",
  "slk": "sk",
  "slv": "sl",
  "sme": "se",
  "smo": "sm",
  "sna": "sn",
  "snd": "sd",
  "som": "so",
  "sot": "st",
  "spa": "es",
  "spv": "or",
  "sqi": "sq",
  "src": "sc",
  "srd": "sc",
  "sro": "sc",
  "srp": "sh",
  "ssh": "ar",
  "ssw": "ss",
  "sun": "su",
  "swa": "sw",
  "swc": "sw",
  "swe": "sv",
  "swh": "sw",
  "tah": "ty",
  "tam": "ta",
  "tat": "tt",
  "tdx": "mg",
  "tel": "te",
  "tgk": "tg",
  "tgl": "tl",
  "tha": "th",
  "tir": "ti",
  "tkg": "mg",
  "tmw": "ms",
  "ton": "to",
  "tsn": "tn",
  "tso": "ts",
  "tuk": "tk",
  "tur": "tr",
  "twi": "ak",
  "txy": "mg",
  "uig": "ug",
  "ukr": "uk",
  "urd": "ur",
  "urk": "ms",
  "uzb": "uz",
  "uzn": "uz",
  "uzs": "uz",
  "ven": "ve",
  "vie": "vi",
  "vkk": "ms",
  "vkt": "ms",
  "vol": "vo",
  "vro": "et",
  "wln": "wa",
  "wol": "wo",
  "wuu": "zh",
  "xho": "xh",
  "xmm": "ms",
  "xmv": "mg",
  "xmw": "mg",
  "ydd": "yi",
  "yid": "yi",
  "yih": "yi",
  "yor": "yo",
  "yue": "zh",
  "zch": "za",
  "zeh": "za",
  "zgb": "za",
  "zgm": "za",
  "zgn": "za",
  "zha": "za",
  "zhd": "za",
  "zhn": "za",
  "zho": "zh",
  "zlj": "za",
  "zlm": "ms",
  "zln": "za",
  "zlq": "za",
  "zmi": "ms",
  "zqe": "za",
  "zsm": "ms",
  "zul": "zu",
  "zyb": "za",
  "zyg": "za",
  "zyj": "za",
  "zyn": "za",
  "zzj": "za"
}

LANGID_TO_ISO = ISO_639_1_TO_3  # {v: k for k, v in iso639_3_to_1.items()}

# Source langs: S2ST / S2TT / ASR don't need source lang
# T2TT / T2ST use this
text_source_language_codes = [
    "afr",
    "amh",
    "arb",
    "ary",
    "arz",
    "asm",
    "azj",
    "bel",
    "ben",
    "bos",
    "bul",
    "cat",
    "ceb",
    "ces",
    "ckb",
    "cmn",
    "cym",
    "dan",
    "deu",
    "ell",
    "eng",
    "est",
    "eus",
    "fin",
    "fra",
    "gaz",
    "gle",
    "glg",
    "guj",
    "heb",
    "hin",
    "hrv",
    "hun",
    "hye",
    "ibo",
    "ind",
    "isl",
    "ita",
    "jav",
    "jpn",
    "kan",
    "kat",
    "kaz",
    "khk",
    "khm",
    "kir",
    "kor",
    "lao",
    "lit",
    "lug",
    "luo",
    "lvs",
    "mai",
    "mal",
    "mar",
    "mkd",
    "mlt",
    "mni",
    "mya",
    "nld",
    "nno",
    "nob",
    "npi",
    "nya",
    "ory",
    "pan",
    "pbt",
    "pes",
    "pol",
    "por",
    "ron",
    "rus",
    "slk",
    "slv",
    "sna",
    "snd",
    "som",
    "spa",
    "srp",
    "swe",
    "swh",
    "tam",
    "tel",
    "tgk",
    "tgl",
    "tha",
    "tur",
    "ukr",
    "urd",
    "uzn",
    "vie",
    "yor",
    "yue",
    "zsm",
    "zul",
]
TEXT_SOURCE_LANGUAGE_NAMES = sorted([language_code_to_name[code] for code in text_source_language_codes])