import { Country } from 'react-phone-number-input' import * as locales from 'date-fns/locale' import type { Locale } from 'date-fns' const localeMapping: Record = { en: 'enUS', 'en-US': 'enUS', 'en-GB': 'enGB', es: 'es', 'es-ES': 'es', fr: 'fr', 'fr-FR': 'fr', de: 'de', 'de-DE': 'de', it: 'it', 'it-IT': 'it', pt: 'pt', 'pt-PT': 'pt', 'pt-BR': 'ptBR', ru: 'ru', 'ru-RU': 'ru', ja: 'ja', 'ja-JP': 'ja', ko: 'ko', 'ko-KR': 'ko', zh: 'zhCN', 'zh-CN': 'zhCN', 'zh-TW': 'zhTW', ar: 'ar', 'ar-SA': 'arSA', nl: 'nl', 'nl-NL': 'nl', sv: 'sv', 'sv-SE': 'sv', da: 'da', 'da-DK': 'da', no: 'nb', nb: 'nb', fi: 'fi', 'fi-FI': 'fi', pl: 'pl', 'pl-PL': 'pl', cs: 'cs', 'cs-CZ': 'cs', sk: 'sk', 'sk-SK': 'sk', hu: 'hu', 'hu-HU': 'hu', ro: 'ro', 'ro-RO': 'ro', bg: 'bg', 'bg-BG': 'bg', hr: 'hr', 'hr-HR': 'hr', sr: 'sr', 'sr-RS': 'sr', sl: 'sl', 'sl-SI': 'sl', et: 'et', 'et-EE': 'et', lv: 'lv', 'lv-LV': 'lv', lt: 'lt', 'lt-LT': 'lt', tr: 'tr', 'tr-TR': 'tr', he: 'he', 'he-IL': 'he', hi: 'hi', 'hi-IN': 'hi', th: 'th', 'th-TH': 'th', vi: 'vi', 'vi-VN': 'vi', id: 'id', 'id-ID': 'id', ms: 'ms', 'ms-MY': 'ms', bn: 'bn', 'bn-BD': 'bn', 'bn-IN': 'bn', } export const getDateFnsLocale = (localeCode: string): Locale => { const mapped = localeMapping[localeCode] if (mapped && locales[mapped as keyof typeof locales]) { return locales[mapped as keyof typeof locales] } const lang = localeCode.split('-')[0] const mappedLang = localeMapping[lang] if (mappedLang && locales[mappedLang as keyof typeof locales]) { return locales[mappedLang as keyof typeof locales] } return locales.enUS } export const timezoneToCountry: Record = { // United States 'America/New_York': 'US', 'America/Chicago': 'US', 'America/Denver': 'US', 'America/Los_Angeles': 'US', 'America/Phoenix': 'US', 'America/Anchorage': 'US', 'America/Honolulu': 'US', 'America/Detroit': 'US', 'America/Indianapolis': 'US', 'America/Kentucky/Louisville': 'US', 'America/Kentucky/Monticello': 'US', 'America/Boise': 'US', 'America/Juneau': 'US', 'America/Nome': 'US', 'America/Adak': 'US', 'Pacific/Honolulu': 'US', // Canada 'America/Toronto': 'CA', 'America/Vancouver': 'CA', 'America/Edmonton': 'CA', 'America/Winnipeg': 'CA', 'America/Halifax': 'CA', 'America/St_Johns': 'CA', 'America/Regina': 'CA', 'America/Montreal': 'CA', // Mexico 'America/Mexico_City': 'MX', 'America/Cancun': 'MX', 'America/Tijuana': 'MX', 'America/Monterrey': 'MX', 'America/Mazatlan': 'MX', 'America/Chihuahua': 'MX', 'America/Hermosillo': 'MX', 'America/Merida': 'MX', // Central America 'America/Guatemala': 'GT', 'America/Belize': 'BZ', 'America/El_Salvador': 'SV', 'America/Tegucigalpa': 'HN', 'America/Managua': 'NI', 'America/Costa_Rica': 'CR', 'America/Panama': 'PA', // Caribbean 'America/Havana': 'CU', 'America/Jamaica': 'JM', 'America/Port-au-Prince': 'HT', 'America/Santo_Domingo': 'DO', 'America/Puerto_Rico': 'PR', 'America/Barbados': 'BB', 'America/Trinidad': 'TT', 'America/Martinique': 'MQ', 'America/Guadeloupe': 'GP', 'America/Curacao': 'CW', 'America/Aruba': 'AW', // South America 'America/Sao_Paulo': 'BR', 'America/Manaus': 'BR', 'America/Fortaleza': 'BR', 'America/Recife': 'BR', 'America/Belem': 'BR', 'America/Bahia': 'BR', 'America/Cuiaba': 'BR', 'America/Campo_Grande': 'BR', 'America/Rio_Branco': 'BR', 'America/Boa_Vista': 'BR', 'America/Porto_Velho': 'BR', 'America/Argentina/Buenos_Aires': 'AR', 'America/Argentina/Cordoba': 'AR', 'America/Argentina/Mendoza': 'AR', 'America/Argentina/Tucuman': 'AR', 'America/Bogota': 'CO', 'America/Lima': 'PE', 'America/Santiago': 'CL', 'America/Caracas': 'VE', 'America/La_Paz': 'BO', 'America/Guayaquil': 'EC', 'America/Asuncion': 'PY', 'America/Montevideo': 'UY', 'America/Paramaribo': 'SR', 'America/Cayenne': 'GF', 'America/Guyana': 'GY', // United Kingdom & Ireland 'Europe/London': 'GB', 'Europe/Dublin': 'IE', 'Europe/Isle_of_Man': 'IM', 'Europe/Jersey': 'JE', 'Europe/Guernsey': 'GG', // Western Europe 'Europe/Paris': 'FR', 'Europe/Berlin': 'DE', 'Europe/Amsterdam': 'NL', 'Europe/Brussels': 'BE', 'Europe/Luxembourg': 'LU', 'Europe/Monaco': 'MC', 'Europe/Zurich': 'CH', 'Europe/Vienna': 'AT', 'Europe/Vaduz': 'LI', // Southern Europe 'Europe/Madrid': 'ES', 'Europe/Rome': 'IT', 'Europe/Lisbon': 'PT', 'Europe/Athens': 'GR', 'Europe/Malta': 'MT', 'Europe/Vatican': 'VA', 'Europe/San_Marino': 'SM', 'Europe/Andorra': 'AD', 'Europe/Gibraltar': 'GI', // Northern Europe 'Europe/Stockholm': 'SE', 'Europe/Oslo': 'NO', 'Europe/Copenhagen': 'DK', 'Europe/Helsinki': 'FI', 'Europe/Reykjavik': 'IS', 'Atlantic/Faroe': 'FO', // Eastern Europe 'Europe/Warsaw': 'PL', 'Europe/Prague': 'CZ', 'Europe/Budapest': 'HU', 'Europe/Bucharest': 'RO', 'Europe/Sofia': 'BG', 'Europe/Belgrade': 'RS', 'Europe/Zagreb': 'HR', 'Europe/Ljubljana': 'SI', 'Europe/Bratislava': 'SK', 'Europe/Tallinn': 'EE', 'Europe/Riga': 'LV', 'Europe/Vilnius': 'LT', 'Europe/Kiev': 'UA', 'Europe/Kyiv': 'UA', 'Europe/Chisinau': 'MD', 'Europe/Minsk': 'BY', 'Europe/Moscow': 'RU', 'Europe/Kaliningrad': 'RU', 'Europe/Volgograd': 'RU', 'Europe/Samara': 'RU', 'Europe/Sarajevo': 'BA', 'Europe/Podgorica': 'ME', 'Europe/Skopje': 'MK', 'Europe/Tirane': 'AL', // Middle East 'Asia/Dubai': 'AE', 'Asia/Riyadh': 'SA', 'Asia/Kuwait': 'KW', 'Asia/Bahrain': 'BH', 'Asia/Qatar': 'QA', 'Asia/Muscat': 'OM', 'Asia/Baghdad': 'IQ', 'Asia/Tehran': 'IR', 'Asia/Jerusalem': 'IL', 'Asia/Amman': 'JO', 'Asia/Beirut': 'LB', 'Asia/Damascus': 'SY', 'Asia/Nicosia': 'CY', 'Asia/Gaza': 'PS', 'Asia/Hebron': 'PS', 'Asia/Aden': 'YE', // Central Asia 'Asia/Kabul': 'AF', 'Asia/Karachi': 'PK', 'Asia/Kolkata': 'IN', 'Asia/Calcutta': 'IN', 'Asia/Dhaka': 'BD', 'Asia/Kathmandu': 'NP', 'Asia/Colombo': 'LK', 'Asia/Thimphu': 'BT', 'Asia/Tashkent': 'UZ', 'Asia/Almaty': 'KZ', 'Asia/Bishkek': 'KG', 'Asia/Dushanbe': 'TJ', 'Asia/Ashgabat': 'TM', // East Asia 'Asia/Tokyo': 'JP', 'Asia/Seoul': 'KR', 'Asia/Shanghai': 'CN', 'Asia/Beijing': 'CN', 'Asia/Chongqing': 'CN', 'Asia/Urumqi': 'CN', 'Asia/Hong_Kong': 'HK', 'Asia/Macau': 'MO', 'Asia/Taipei': 'TW', 'Asia/Ulaanbaatar': 'MN', // Southeast Asia 'Asia/Singapore': 'SG', 'Asia/Bangkok': 'TH', 'Asia/Jakarta': 'ID', 'Asia/Pontianak': 'ID', 'Asia/Makassar': 'ID', 'Asia/Jayapura': 'ID', 'Asia/Manila': 'PH', 'Asia/Kuala_Lumpur': 'MY', 'Asia/Yangon': 'MM', 'Asia/Rangoon': 'MM', 'Asia/Ho_Chi_Minh': 'VN', 'Asia/Saigon': 'VN', 'Asia/Phnom_Penh': 'KH', 'Asia/Vientiane': 'LA', 'Asia/Brunei': 'BN', 'Asia/Dili': 'TL', // Russia & Central Asia (additional zones) 'Asia/Yekaterinburg': 'RU', 'Asia/Omsk': 'RU', 'Asia/Novosibirsk': 'RU', 'Asia/Krasnoyarsk': 'RU', 'Asia/Irkutsk': 'RU', 'Asia/Yakutsk': 'RU', 'Asia/Vladivostok': 'RU', 'Asia/Magadan': 'RU', 'Asia/Kamchatka': 'RU', 'Asia/Anadyr': 'RU', 'Asia/Sakhalin': 'RU', // Australia 'Australia/Sydney': 'AU', 'Australia/Melbourne': 'AU', 'Australia/Brisbane': 'AU', 'Australia/Perth': 'AU', 'Australia/Adelaide': 'AU', 'Australia/Darwin': 'AU', 'Australia/Hobart': 'AU', 'Australia/Canberra': 'AU', 'Australia/Lord_Howe': 'AU', 'Australia/Eucla': 'AU', // Pacific 'Pacific/Auckland': 'NZ', 'Pacific/Chatham': 'NZ', 'Pacific/Fiji': 'FJ', 'Pacific/Tongatapu': 'TO', 'Pacific/Apia': 'WS', 'Pacific/Port_Moresby': 'PG', 'Pacific/Guadalcanal': 'SB', 'Pacific/Noumea': 'NC', 'Pacific/Tahiti': 'PF', 'Pacific/Marquesas': 'PF', 'Pacific/Gambier': 'PF', 'Pacific/Pago_Pago': 'AS', 'Pacific/Guam': 'GU', 'Pacific/Saipan': 'MP', 'Pacific/Palau': 'PW', 'Pacific/Majuro': 'MH', 'Pacific/Tarawa': 'KI', 'Pacific/Funafuti': 'TV', 'Pacific/Nauru': 'NR', 'Pacific/Niue': 'NU', 'Pacific/Rarotonga': 'CK', 'Pacific/Norfolk': 'NF', 'Pacific/Efate': 'VU', 'Pacific/Kosrae': 'FM', 'Pacific/Ponape': 'FM', 'Pacific/Truk': 'FM', // Africa - North 'Africa/Cairo': 'EG', 'Africa/Tripoli': 'LY', 'Africa/Tunis': 'TN', 'Africa/Algiers': 'DZ', 'Africa/Casablanca': 'MA', 'Africa/El_Aaiun': 'EH', // Africa - West 'Africa/Lagos': 'NG', 'Africa/Accra': 'GH', 'Africa/Abidjan': 'CI', 'Africa/Dakar': 'SN', 'Africa/Bamako': 'ML', 'Africa/Conakry': 'GN', 'Africa/Bissau': 'GW', 'Africa/Monrovia': 'LR', 'Africa/Freetown': 'SL', 'Africa/Lome': 'TG', 'Africa/Porto-Novo': 'BJ', 'Africa/Ouagadougou': 'BF', 'Africa/Niamey': 'NE', 'Africa/Nouakchott': 'MR', 'Africa/Banjul': 'GM', // Africa - Central 'Africa/Kinshasa': 'CD', 'Africa/Lubumbashi': 'CD', 'Africa/Brazzaville': 'CG', 'Africa/Douala': 'CM', 'Africa/Bangui': 'CF', 'Africa/Libreville': 'GA', 'Africa/Malabo': 'GQ', 'Africa/Luanda': 'AO', 'Africa/Ndjamena': 'TD', 'Africa/Sao_Tome': 'ST', // Africa - East 'Africa/Nairobi': 'KE', 'Africa/Dar_es_Salaam': 'TZ', 'Africa/Kampala': 'UG', 'Africa/Kigali': 'RW', 'Africa/Bujumbura': 'BI', 'Africa/Addis_Ababa': 'ET', 'Africa/Mogadishu': 'SO', 'Africa/Djibouti': 'DJ', 'Africa/Asmara': 'ER', 'Africa/Juba': 'SS', // Africa - Southern 'Africa/Johannesburg': 'ZA', 'Africa/Maputo': 'MZ', 'Africa/Harare': 'ZW', 'Africa/Lusaka': 'ZM', 'Africa/Gaborone': 'BW', 'Africa/Windhoek': 'NA', 'Africa/Maseru': 'LS', 'Africa/Mbabane': 'SZ', 'Africa/Blantyre': 'MW', 'Indian/Mauritius': 'MU', 'Indian/Reunion': 'RE', 'Indian/Mayotte': 'YT', 'Indian/Comoro': 'KM', 'Indian/Antananarivo': 'MG', 'Indian/Seychelles': 'SC', // Atlantic 'Atlantic/Azores': 'PT', 'Atlantic/Madeira': 'PT', 'Atlantic/Canary': 'ES', 'Atlantic/Cape_Verde': 'CV', 'Atlantic/Reykjavik': 'IS', 'Atlantic/St_Helena': 'SH', 'Atlantic/Stanley': 'FK', 'Atlantic/Bermuda': 'BM', // Indian Ocean 'Indian/Maldives': 'MV', 'Indian/Chagos': 'IO', 'Indian/Kerguelen': 'TF', 'Indian/Cocos': 'CC', 'Indian/Christmas': 'CX', // Antarctica (using nearby countries for phone purposes) 'Antarctica/McMurdo': 'NZ', 'Antarctica/Casey': 'AU', 'Antarctica/Davis': 'AU', 'Antarctica/Mawson': 'AU', }