/**
 * Country helpers shared by the carrier-rate import (server) and the price-sheet
 * page (client). Imported by RELATIVE path from both sides — no Nuxt auto-imports.
 *
 * - DHL_COUNTRY_NAME_TO_ISO2: German destination names exactly as printed in the
 *   DHL price annexes (P01 / P02) → ISO-3166 alpha-2 (= C_Country.CountryCode).
 *   The parser fails loudly on a name that is not listed here.
 * - EU_COUNTRY_CODES: EU-27 — drives the "EU" / "Non-EU" sections of the price
 *   sheet. The DHL zone label is NOT an EU marker (zone 2 / 3 mix EU and non-EU).
 */

export const EU_COUNTRY_CODES: readonly string[] = [
  'AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT',
  'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE'
]

export const isEuCountryCode = (code: string | null | undefined): boolean =>
  !!code && EU_COUNTRY_CODES.includes(String(code).toUpperCase())

/** Normalise the odd apostrophes / spacing DHL prints ("Côte d´Ivoire"). */
export const normalizeDhlCountryName = (name: string): string =>
  String(name || '').replace(/[´’`]/g, "'").replace(/\s+/g, ' ').trim()

export const DHL_COUNTRY_NAME_TO_ISO2: Record<string, string> = {
  'Afghanistan': 'AF',
  'Ägypten': 'EG',
  'Åland-Inseln': 'AX',
  'Albanien': 'AL',
  'Algerien': 'DZ',
  'Amerikanisch-Samoa': 'AS',
  'Amerikan. Jungferninseln': 'VI',
  'Andorra': 'AD',
  'Angola': 'AO',
  'Anguilla': 'AI',
  'Antigua und Barbuda': 'AG',
  'Äquatorialguinea': 'GQ',
  'Argentinien': 'AR',
  'Armenien': 'AM',
  'Aruba': 'AW',
  'Aserbaidschan': 'AZ',
  'Äthiopien': 'ET',
  'Australien': 'AU',
  'Bahamas': 'BS',
  'Bahrain': 'BH',
  'Bangladesch': 'BD',
  'Barbados': 'BB',
  'Belarus': 'BY',
  'Belgien': 'BE',
  'Belize': 'BZ',
  'Benin': 'BJ',
  'Bermuda': 'BM',
  'Bhutan': 'BT',
  'Bolivien': 'BO',
  'Bonaire': 'BQ',
  'Bosnien-Herzeg.': 'BA',
  'Botsuana': 'BW',
  'Bouvetinsel': 'BV',
  'Brasilien': 'BR',
  'Brit Gebiet ind Ozea': 'IO',
  'Britische Jungferninseln': 'VG',
  'Brunei Darussalam': 'BN',
  'Bulgarien': 'BG',
  'Burkina Faso': 'BF',
  'Burundi': 'BI',
  'Chile': 'CL',
  'China, Volksrepublik': 'CN',
  'Cookinseln': 'CK',
  'Costa Rica': 'CR',
  "Côte d'Ivoire, Republik": 'CI',
  'Curaçao': 'CW',
  'Dänemark': 'DK',
  'Dominica': 'DM',
  'Dominik. Rep.': 'DO',
  'Dschibuti': 'DJ',
  'Ecuador': 'EC',
  'El Salvador': 'SV',
  'Eritrea': 'ER',
  'Estland': 'EE',
  'Eswatini': 'SZ',
  'Falklandinseln': 'FK',
  'Färöer': 'FO',
  'Fidschi': 'FJ',
  'Finnland': 'FI',
  'Frankreich': 'FR',
  'Französisch-Guayana': 'GF',
  'Französisch-Polynesien': 'PF',
  'Franz-Südterritorien': 'TF',
  'Gabun': 'GA',
  'Gambia': 'GM',
  'Georgien': 'GE',
  'Ghana': 'GH',
  'Gibraltar': 'GI',
  'Grenada': 'GD',
  'Griechenland': 'GR',
  'Grönland': 'GL',
  'Großbritannien': 'GB',
  'Guadeloupe': 'GP',
  'Guam': 'GU',
  'Guatemala': 'GT',
  'Guernsey': 'GG',
  'Guinea': 'GN',
  'Guinea-Bissau': 'GW',
  'Guyana': 'GY',
  'Haiti': 'HT',
  'Heard- und McDonaldinseln': 'HM',
  'Honduras': 'HN',
  'Hongkong': 'HK',
  'Indien': 'IN',
  'Indonesien': 'ID',
  'Irak': 'IQ',
  'Iran': 'IR',
  'Irland': 'IE',
  'Island': 'IS',
  'Isle of Man': 'IM',
  'Israel': 'IL',
  'Italien': 'IT',
  'Jamaika': 'JM',
  'Japan': 'JP',
  'Jemen': 'YE',
  'Jersey': 'JE',
  'Jordanien': 'JO',
  'Kaiman-Inseln': 'KY',
  'Kambodscha': 'KH',
  'Kamerun': 'CM',
  'Kanada': 'CA',
  'Kap Verde': 'CV',
  'Kasachstan': 'KZ',
  'Katar': 'QA',
  'Kenia': 'KE',
  'Kirgistan': 'KG',
  'Kiribati': 'KI',
  'Kokosinseln, Keelinginseln': 'CC',
  'Kolumbien': 'CO',
  'Komoren': 'KM',
  'Kongo, Demokratische Republik': 'CD',
  'Kongo, Republik': 'CG',
  'Kosovo': 'XK',
  'Kroatien': 'HR',
  'Kuba': 'CU',
  'Kuwait': 'KW',
  'Laos': 'LA',
  'Lesotho': 'LS',
  'Lettland': 'LV',
  'Libanon': 'LB',
  'Liberia': 'LR',
  'Libyen': 'LY',
  'Liechtenstein': 'LI',
  'Litauen': 'LT',
  'Luxemburg': 'LU',
  'Macau': 'MO',
  'Madagaskar': 'MG',
  'Malawi': 'MW',
  'Malaysia': 'MY',
  'Malediven': 'MV',
  'Mali': 'ML',
  'Malta': 'MT',
  'Marokko (inkl. Westsahara)': 'MA',
  'Marschallinseln': 'MH',
  'Martinique': 'MQ',
  'Mauretanien': 'MR',
  'Mauritius': 'MU',
  'Mayotte': 'YT',
  'Mexiko': 'MX',
  'Mikronesien': 'FM',
  'Moldau, Republik': 'MD',
  'Monaco': 'MC',
  'Mongolei': 'MN',
  'Montenegro': 'ME',
  'Montserrat': 'MS',
  'Mosambik': 'MZ',
  'Myanmar': 'MM',
  'Namibia': 'NA',
  'Nauru': 'NR',
  'Nepal': 'NP',
  'Neukaledonien': 'NC',
  'Neuseeland': 'NZ',
  'Nicaragua': 'NI',
  'Niederlande': 'NL',
  'Niederländ. Antillen': 'AN',
  'Niger': 'NE',
  'Nigeria': 'NG',
  'Niue': 'NU',
  'Nordkorea': 'KP',
  'Nordmazedonien (Republik)': 'MK',
  'Norfolkinsel': 'NF',
  'Norwegen': 'NO',
  'Nördliche Marianen': 'MP',
  'Oman': 'OM',
  'Österreich': 'AT',
  'Ost Timor': 'TL',
  'Pakistan': 'PK',
  'Palau': 'PW',
  'Palästinensische Autonomiegebiete': 'PS',
  'Panama': 'PA',
  'Papua-Neuguinea': 'PG',
  'Paraguay': 'PY',
  'Peru': 'PE',
  'Philippinen': 'PH',
  'Pitcairninseln': 'PN',
  'Polen': 'PL',
  'Portugal': 'PT',
  'Puerto Rico': 'PR',
  'Réunion': 'RE',
  'Ruanda': 'RW',
  'Rumänien': 'RO',
  'Russische Föderation': 'RU',
  'Saint Martin': 'MF',
  'Saint-Barthélemy': 'BL',
  'Salomonen': 'SB',
  'Sambia': 'ZM',
  'Samoa': 'WS',
  'San Marino': 'SM',
  'São Tomé und Príncipe': 'ST',
  'Saudi-Arabien, Königreich': 'SA',
  'Schweden': 'SE',
  'Schweiz': 'CH',
  'Senegal': 'SN',
  'Serbien, Republik': 'RS',
  'Seyschellen': 'SC',
  'Sierra Leone': 'SL',
  'Simbabwe': 'ZW',
  'Singapur': 'SG',
  'Sint Maarten': 'SX',
  'Slowakei': 'SK',
  'Slowenien': 'SI',
  'Somalia': 'SO',
  'Spanien': 'ES',
  'Sri Lanka': 'LK',
  'St. Helena': 'SH',
  'St. Kitts und Nevis': 'KN',
  'St. Lucia': 'LC',
  'St. Pierre und Miquelon': 'PM',
  'St. Vincent und die Grenadinen': 'VC',
  'Südafrika': 'ZA',
  'Sudan': 'SD',
  'Südkorea': 'KR',
  'Südsudan': 'SS',
  'Suriname': 'SR',
  'Svalbard (Spitzbergen) & Jan Mayen': 'SJ',
  'Syrien': 'SY',
  'Tadschikistan': 'TJ',
  'Taiwan': 'TW',
  'Tansania': 'TZ',
  'Thailand': 'TH',
  'Togo': 'TG',
  'Tonga': 'TO',
  'Trinidad und Tobago': 'TT',
  'Tschad': 'TD',
  'Tschechische Republik': 'CZ',
  'Tunesien': 'TN',
  'Türkei': 'TR',
  'Turkmenistan': 'TM',
  'Turks- und Caicosinseln': 'TC',
  'Tuvalu': 'TV',
  'Uganda': 'UG',
  'Ukraine': 'UA',
  'Ungarn': 'HU',
  'Uruguay': 'UY',
  'USA': 'US',
  'Usbekistan': 'UZ',
  'Vanuatu': 'VU',
  'Vatikanstadt': 'VA',
  'Venezuela': 'VE',
  'Vereinigte Arabische Emirate': 'AE',
  'Vietnam': 'VN',
  'Wallis und Futuna': 'WF',
  'Weihnachtsinsel': 'CX',
  'Zentralafrikanische Republik': 'CF',
  'Zypern': 'CY',
  'Zypern, Republik': 'CY'
}

/** German DHL name → ISO2, or null when unknown (caller decides whether to fail). */
export const dhlCountryToIso2 = (name: string): string | null => {
  const key = normalizeDhlCountryName(name)
  if (DHL_COUNTRY_NAME_TO_ISO2[key]) return DHL_COUNTRY_NAME_TO_ISO2[key]
  const hit = Object.keys(DHL_COUNTRY_NAME_TO_ISO2).find((k) => normalizeDhlCountryName(k) === key)
  return hit ? DHL_COUNTRY_NAME_TO_ISO2[hit] : null
}
