import type { LocaleConfig } from '../types';

export const fr: LocaleConfig = {
  locale: 'fr',
  name: 'French',
  scripts: ['latn'],
  countries: ['FR', 'BE', 'CH', 'CA', 'LU', 'MC'],
  phoneContextKeywords: [
    'téléphone',
    'telephone',
    'numéro',
    'portable',
    'mobile',
    'fixe',
    'téléph',
    'tél.',
    'tél',
    'tel.',
    'tel',
    'n°',
  ],
  cvcContextKeywords: [
    'cryptogramme visuel',
    'cryptogramme',
    'code de sécurité',
    'cvc',
    'cvv',
    'cv2',
  ],
  address: {
    forms: ['standard', 'inverted', 'lieu-dit', 'po-box'],
    postcodeForm: 'continental',
    postcodeRegex: '\\d{5}',
    streetKeywordsStandard: [
      'rue',
      'avenue',
      'av.',
      'av',
      'boulevard',
      'bd.',
      'bd',
      'blvd.',
      'blvd',
      'chemin',
      'ch.',
      'place',
      'pl.',
      'impasse',
      'imp.',
      'allée',
      'allee',
      'route',
      'rt.',
      'quai',
      'cours',
      'square',
      'passage',
      'faubourg',
      'fbg.',
      'voie',
      'promenade',
      'rond-point',
    ],
    streetKeywordsInverted: [
      'Rue',
      'Avenue',
      'Av.',
      'Av',
      'Boulevard',
      'Bd.',
      'Bd',
      'Blvd.',
      'Blvd',
      'Chemin',
      'Ch.',
      'Place',
      'Pl.',
      'Impasse',
      'Imp.',
      'Allée',
      'Route',
      'Rt.',
      'Quai',
      'Cours',
      'Square',
      'Passage',
      'Faubourg',
      'Fbg.',
      'Voie',
      'Promenade',
      'Rond-point',
    ],
    ordinalAfterNumber: ['bis', 'ter', 'quater'],
    lieuDitKeywords: ['lieu-dit', 'Lieu-dit'],
    poBoxKeywords: ['Case postale', 'B.P.', 'BP'],
    floorKeywords: [
      'Rez-de-chaussée',
      'appartement',
      'Résidence',
      'Bâtiment',
      'Escalier',
      'Rés.',
      'Bât.',
      'Esc.',
      'étage',
      'Etage',
      'appt.',
      'App.',
      'RDC',
      'ét.',
    ],
    countryNames: [
      'France',
      'Belgique',
      'Belgium',
      'Suisse',
      'Switzerland',
      'Luxembourg',
      'Monaco',
      'Guadeloupe',
      'Martinique',
      'Réunion',
      'Guyane',
      'Nouvelle-Calédonie',
      'Polynésie française',
      'Mayotte',
      'Saint-Martin',
      'Saint-Barthélemy',
      'FR',
      'BE',
      'CH',
      'LU',
      'MC',
    ],
    houseNumberMarkers: ['n°', 'no.', 'numéro'],
    countryPostcodePrefixes: [],
    requireUppercase: true,
  },
  nationalIds: [
    {
      id: 'fr-nir',
      name: 'French NIR (INSEE)',
      pattern:
        '\\b[12]\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}\\s?\\d{3}\\s?\\d{3}\\s?\\d{2}\\b',
      replacement: '[FRENCH_NIR]',
    },
    {
      id: 'fr-passport',
      name: 'French Passport Number',
      pattern: '\\b\\d{2}[A-Z]{2}\\d{5}\\b',
      replacement: '[PASSPORT]',
    },
    {
      id: 'fr-siret',
      name: 'French SIRET',
      pattern: '\\b\\d{3}\\s\\d{3}\\s\\d{3}\\s\\d{5}\\b',
      checksum: 'luhn',
      replacement: '[FR_SIRET]',
    },
    {
      id: 'be-nrn',
      name: 'Belgian National Register Number',
      pattern: '\\b\\d{2}\\.\\d{2}\\.\\d{2}-\\d{3}\\.\\d{2}\\b',
      checksum: 'be-nrn',
      replacement: '[BE_NRN]',
    },
  ],
  dateOfBirth: {
    monthsLong: [
      'janvier',
      'février',
      'mars',
      'avril',
      'mai',
      'juin',
      'juillet',
      'août',
      'septembre',
      'octobre',
      'novembre',
      'décembre',
    ],
    monthsShort: [
      'janv.',
      'févr.',
      'mars',
      'avr.',
      'mai',
      'juin',
      'juil.',
      'août',
      'sept.',
      'oct.',
      'nov.',
      'déc.',
    ],
    contextKeywords: [
      'né le',
      'née le',
      'date de naissance',
      'né(e) le',
      'naissance',
    ],
  },
};
