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

export const de: LocaleConfig = {
  locale: 'de',
  name: 'German',
  scripts: ['latn'],
  countries: ['DE', 'AT', 'CH', 'LI', 'LU'],
  phoneContextKeywords: [
    'telefonnummer',
    'telefon',
    'festnetz',
    'mobilnummer',
    'rufnummer',
    'durchwahl',
    'anschluss',
    'mobil',
    'handy',
    'natel',
    'ruf',
    'fon',
    'tel.',
    'tel',
  ],
  cvcContextKeywords: [
    'Kartenprüfnummer',
    'Kartenprüfziffer',
    'Prüfziffer',
    'KPN',
    'CVC',
    'CVV',
    'CV2',
    'Sicherheitscode',
  ],
  address: {
    forms: [
      'glued-suffix',
      'inverted',
      'standalone-suffix',
      'inverted-with-article',
      'po-box',
    ],
    postcodeForm: 'continental',
    postcodeRegex: '\\d{4,5}',
    streetSuffixGlued: [
      'straße',
      'strasse',
      'str.',
      'allee',
      'platz',
      'gasse',
      'ring',
      'markt',
      'hof',
      'weg',
      'bahn',
      'chaussee',
      'stieg',
      'blatt',
      'reihe',
      'damm',
      'ufer',
      'berg',
      'wiese',
      'anger',
      'brücke',
      'matt',
      'vorstadt',
      'wall',
    ],
    streetKeywordsSpaced: [
      'Straße',
      'Strasse',
      'Str.',
      'Allee',
      'Platz',
      'Gasse',
      'Ring',
      'Markt',
      'Hof',
      'Weg',
      'Wall',
    ],
    streetKeywordsFreeSuffix: [
      'quai',
      'berg',
      'markt',
      'platz',
      'hof',
      'matt',
      'brücke',
      'vorstadt',
      'chaussee',
    ],
    invertedPrepositions: [
      'Unter',
      'An',
      'Am',
      'Auf',
      'Vor',
      'Hinter',
      'Bei',
      'In',
      'Im',
    ],
    invertedArticles: ['den', 'der', 'dem', 'das', 'die'],
    invertedPrepositionsLong: [
      'Unter',
      'Auf',
      'Über',
      'Vor',
      'Hinter',
      'Beim',
      'Bei',
      'Vom',
      'Zum',
      'Zur',
      'Am',
      'An',
      'Im',
      'In',
    ],
    poBoxKeywords: ['Postfach', 'PF.', 'PF'],
    floorKeywords: [
      'Hochparterre',
      'Seitenflügel',
      'Quergebäude',
      'Erdgeschoss',
      'Souterrain',
      'Vorderhaus',
      'Hinterhaus',
      'Wohnung',
      'Whg.',
      'Aufgang',
      'Eingang',
      'Etage',
      'Stock',
      'Haus',
      'Zimmer',
      'Zi.',
      'DG',
      'OG',
      'UG',
      'EG',
      'WE',
      'links',
      'rechts',
      'c/o',
      'z. Hd.',
    ],
    countryNames: [
      'Deutschland',
      'Germany',
      'Österreich',
      'Austria',
      'Schweiz',
      'Switzerland',
      'Liechtenstein',
      'Luxembourg',
      'Luxemburg',
      'DE',
      'AT',
      'CH',
      'LI',
      'LU',
      'FL',
    ],
    houseNumberMarkers: ['Nr.', 'Nr'],
    countryPostcodePrefixes: ['D', 'A', 'CH', 'LI', 'FL', 'L'],
    requireUppercase: true,
  },
  nationalIds: [
    {
      id: 'de-personalausweis',
      name: 'German Personalausweis',
      pattern: '\\b[CFGHJKLMNPRTVWXYZ][CFGHJKLMNPRTVWXYZ\\d]{8}\\b',
      checksum: 'icao9303',
      checksumLength: 9,
      replacement: '[GERMAN_ID]',
    },
    {
      id: 'de-steuer-id',
      name: 'German Tax ID (Steuer-IdNr.)',
      pattern: '\\b\\d{2}[ ]\\d{3}[ ]\\d{3}[ ]\\d{3}\\b',
      checksum: 'de-steuer-id',
      replacement: '[DE_STEUER_ID]',
    },
    {
      id: 'at-passport',
      name: 'Austrian Reisepass',
      pattern: '\\b[PU][A-Z]\\d{7}\\b',
      replacement: '[PASSPORT]',
    },
    {
      id: 'ch-ahv',
      name: 'Swiss AHV/AVS Number',
      pattern: '\\b756[.\\s-]?\\d{4}[.\\s-]?\\d{4}[.\\s-]?\\d{2}\\b',
      checksum: 'ean13',
      replacement: '[SWISS_AHV]',
    },
    {
      id: 'ch-uid',
      name: 'Swiss UID (Business ID)',
      pattern: '\\bCHE-\\d{3}\\.\\d{3}\\.\\d{3}\\b',
      replacement: '[SWISS_UID]',
    },
  ],
  dateOfBirth: {
    monthsLong: [
      'Januar',
      'Februar',
      'März',
      'April',
      'Mai',
      'Juni',
      'Juli',
      'August',
      'September',
      'Oktober',
      'November',
      'Dezember',
    ],
    monthsShort: [
      'Jan.',
      'Feb.',
      'Mär.',
      'Apr.',
      'Mai',
      'Jun.',
      'Jul.',
      'Aug.',
      'Sep.',
      'Okt.',
      'Nov.',
      'Dez.',
    ],
    contextKeywords: [
      'geboren am',
      'Geburtsdatum',
      'geb. am',
      'geb.',
      'Geburtstag',
    ],
  },
};
