export type RegionCode =
  | 'AC'
  | 'AD'
  | 'AE'
  | 'AF'
  | 'AG'
  | 'US'
  | 'AI'
  | 'AL'
  | 'AM'
  | 'AO'
  | 'AR'
  | 'AS'
  | 'AT'
  | 'AU'
  | 'AW'
  | 'AX'
  | 'FI'
  | 'AZ'
  | 'BA'
  | 'BB'
  | 'BD'
  | 'BE'
  | 'BF'
  | 'BG'
  | 'BH'
  | 'BI'
  | 'BJ'
  | 'BL'
  | 'GP'
  | 'BM'
  | 'BN'
  | 'BO'
  | 'BQ'
  | 'CW'
  | 'BR'
  | 'BS'
  | 'BT'
  | 'BW'
  | 'BY'
  | 'BZ'
  | 'CA'
  | 'CC'
  | 'CD'
  | 'CF'
  | 'CG'
  | 'CH'
  | 'CI'
  | 'CK'
  | 'CL'
  | 'CM'
  | 'CN'
  | 'CO'
  | 'CR'
  | 'CU'
  | 'CV'
  | 'CX'
  | 'CY'
  | 'CZ'
  | 'DE'
  | 'DJ'
  | 'DK'
  | 'DM'
  | 'DO'
  | 'DZ'
  | 'EC'
  | 'EE'
  | 'EG'
  | 'EH'
  | 'MA'
  | 'ER'
  | 'ES'
  | 'ET'
  | 'FJ'
  | 'FK'
  | 'FM'
  | 'FO'
  | 'FR'
  | 'GA'
  | 'GB'
  | 'GD'
  | 'GE'
  | 'GF'
  | 'GG'
  | 'GH'
  | 'GI'
  | 'GL'
  | 'GM'
  | 'GN'
  | 'GQ'
  | 'GR'
  | 'GT'
  | 'GU'
  | 'GW'
  | 'GY'
  | 'HK'
  | 'HN'
  | 'HR'
  | 'HT'
  | 'HU'
  | 'ID'
  | 'IE'
  | 'IL'
  | 'IM'
  | 'IN'
  | 'IO'
  | 'IQ'
  | 'IR'
  | 'IS'
  | 'IT'
  | 'JE'
  | 'JM'
  | 'JO'
  | 'JP'
  | 'KE'
  | 'KG'
  | 'KH'
  | 'KI'
  | 'KM'
  | 'KN'
  | 'KP'
  | 'KR'
  | 'KW'
  | 'KY'
  | 'KZ'
  | 'RU'
  | 'LA'
  | 'LB'
  | 'LC'
  | 'LI'
  | 'LK'
  | 'LR'
  | 'LS'
  | 'LT'
  | 'LU'
  | 'LV'
  | 'LY'
  | 'MC'
  | 'MD'
  | 'ME'
  | 'MF'
  | 'MG'
  | 'MH'
  | 'MK'
  | 'ML'
  | 'MM'
  | 'MN'
  | 'MO'
  | 'MP'
  | 'MQ'
  | 'MR'
  | 'MS'
  | 'MT'
  | 'MU'
  | 'MV'
  | 'MW'
  | 'MX'
  | 'MY'
  | 'MZ'
  | 'NA'
  | 'NC'
  | 'NE'
  | 'NF'
  | 'NG'
  | 'NI'
  | 'NL'
  | 'NO'
  | 'NP'
  | 'NR'
  | 'NU'
  | 'NZ'
  | 'OM'
  | 'PA'
  | 'PE'
  | 'PF'
  | 'PG'
  | 'PH'
  | 'PK'
  | 'PL'
  | 'PM'
  | 'PR'
  | 'PS'
  | 'PT'
  | 'PW'
  | 'PY'
  | 'QA'
  | 'RE'
  | 'RO'
  | 'RS'
  | 'RW'
  | 'SA'
  | 'SB'
  | 'SC'
  | 'SD'
  | 'SE'
  | 'SG'
  | 'SH'
  | 'SI'
  | 'SJ'
  | 'SK'
  | 'SL'
  | 'SM'
  | 'SN'
  | 'SO'
  | 'SR'
  | 'SS'
  | 'ST'
  | 'SV'
  | 'SX'
  | 'SY'
  | 'SZ'
  | 'TA'
  | 'TC'
  | 'TD'
  | 'TG'
  | 'TH'
  | 'TJ'
  | 'TK'
  | 'TL'
  | 'TM'
  | 'TN'
  | 'TO'
  | 'TR'
  | 'TT'
  | 'TV'
  | 'TW'
  | 'TZ'
  | 'UA'
  | 'UG'
  | 'UY'
  | 'UZ'
  | 'VA'
  | 'VC'
  | 'VE'
  | 'VG'
  | 'VI'
  | 'VN'
  | 'VU'
  | 'WF'
  | 'WS'
  | 'XK'
  | 'YE'
  | 'YT'
  | 'ZA'
  | 'ZM'
  | 'ZW'
  | 'PN'
  | 'AN'
  | '001';

export type CountryCallingCodeNumeric =
  | 1
  | 7
  | 20
  | 27
  | 30
  | 31
  | 32
  | 33
  | 34
  | 36
  | 39
  | 40
  | 41
  | 43
  | 44
  | 45
  | 46
  | 47
  | 48
  | 49
  | 51
  | 52
  | 53
  | 54
  | 55
  | 56
  | 57
  | 58
  | 60
  | 61
  | 62
  | 63
  | 64
  | 65
  | 66
  | 81
  | 82
  | 84
  | 86
  | 90
  | 91
  | 92
  | 93
  | 94
  | 95
  | 98
  | 211
  | 212
  | 213
  | 216
  | 218
  | 220
  | 221
  | 222
  | 223
  | 224
  | 225
  | 226
  | 227
  | 228
  | 229
  | 230
  | 231
  | 232
  | 233
  | 234
  | 235
  | 236
  | 237
  | 238
  | 239
  | 240
  | 241
  | 242
  | 243
  | 244
  | 245
  | 246
  | 247
  | 248
  | 249
  | 250
  | 251
  | 252
  | 253
  | 254
  | 255
  | 256
  | 257
  | 258
  | 260
  | 261
  | 262
  | 263
  | 264
  | 265
  | 266
  | 267
  | 268
  | 269
  | 290
  | 291
  | 297
  | 298
  | 299
  | 350
  | 351
  | 352
  | 353
  | 354
  | 355
  | 356
  | 357
  | 358
  | 359
  | 370
  | 371
  | 372
  | 373
  | 374
  | 375
  | 376
  | 377
  | 378
  | 380
  | 381
  | 382
  | 383
  | 385
  | 386
  | 387
  | 389
  | 420
  | 421
  | 423
  | 500
  | 501
  | 502
  | 503
  | 504
  | 505
  | 506
  | 507
  | 508
  | 509
  | 590
  | 591
  | 592
  | 593
  | 594
  | 595
  | 596
  | 597
  | 598
  | 599
  | 670
  | 672
  | 673
  | 674
  | 675
  | 676
  | 677
  | 678
  | 679
  | 680
  | 681
  | 682
  | 683
  | 685
  | 686
  | 687
  | 688
  | 689
  | 690
  | 691
  | 692
  | 800
  | 808
  | 850
  | 852
  | 853
  | 855
  | 856
  | 870
  | 878
  | 880
  | 881
  | 882
  | 883
  | 886
  | 888
  | 960
  | 961
  | 962
  | 963
  | 964
  | 965
  | 966
  | 967
  | 968
  | 970
  | 971
  | 972
  | 973
  | 974
  | 975
  | 976
  | 977
  | 979
  | 992
  | 993
  | 994
  | 995
  | 996
  | 998;

export type CountryCallingCodeString = `${CountryCallingCodeNumeric}`;

export type CountryCodeToRegionCodeMap = Partial<Record<CountryCallingCodeString, Array<RegionCode>>>;

export interface Meta {
  regionCodes: Array<RegionCode>;
  countryCodeToRegionCodeMap: CountryCodeToRegionCodeMap;
  countryToMetadata: Partial<Record<RegionCode, Array<any>>>;
}

/**
 * Given array of region codes whose metadata is desired,
 * Return libphonenumber metadata for those regions,
 * including the necessary metadata for the main countries for each country calling code
 */
export function loadMeta(regionCodeArray?: Array<RegionCode>): Meta;
