/**
 * Legal Basis Catalog
 *
 * Comprehensive information about GDPR legal bases (Art. 6, 9, 10)
 */

import { LegalBasisType, LocalizedText, PersonalDataCategory } from '../types'

export interface LegalBasisInfo {
  type: LegalBasisType
  article: string
  name: LocalizedText
  shortName: LocalizedText
  description: LocalizedText
  requirements: LocalizedText[]
  suitableFor: string[]
  notSuitableFor: string[]
  documentationNeeded: LocalizedText[]
  isSpecialCategory: boolean
  notes?: LocalizedText
}

export interface RetentionPeriodInfo {
  id: string
  name: LocalizedText
  legalBasis: string
  duration: {
    value: number
    unit: 'DAYS' | 'MONTHS' | 'YEARS'
  }
  description: LocalizedText
  applicableTo: string[]
}

// ==========================================
// LEGAL BASIS INFORMATION (Art. 6 DSGVO)
// ==========================================

export const LEGAL_BASIS_INFO: LegalBasisInfo[] = [
  // Art. 6 Abs. 1 DSGVO - Standard legal bases
  {
    type: 'CONSENT',
    article: 'Art. 6 Abs. 1 lit. a DSGVO',
    name: { de: 'Einwilligung', en: 'Consent' },
    shortName: { de: 'Einwilligung', en: 'Consent' },
    description: {
      de: 'Die betroffene Person hat ihre Einwilligung zu der Verarbeitung der sie betreffenden personenbezogenen Daten für einen oder mehrere bestimmte Zwecke gegeben.',
      en: 'The data subject has given consent to the processing of his or her personal data for one or more specific purposes.',
    },
    requirements: [
      { de: 'Freiwillig erteilt', en: 'Freely given' },
      { de: 'Für bestimmten Zweck', en: 'For a specific purpose' },
      { de: 'Informiert', en: 'Informed' },
      { de: 'Unmissverständlich', en: 'Unambiguous' },
      { de: 'Jederzeit widerrufbar', en: 'Revocable at any time' },
      { de: 'Nachweis muss möglich sein', en: 'Must be demonstrable' },
    ],
    suitableFor: ['Newsletter', 'Marketing', 'Cookies', 'Tracking', 'Fotos/Videos'],
    notSuitableFor: ['Vertragsdurchführung', 'Gesetzliche Pflichten', 'Arbeitsverhältnis'],
    documentationNeeded: [
      { de: 'Einwilligungstext', en: 'Consent text' },
      { de: 'Zeitpunkt der Einwilligung', en: 'Time of consent' },
      { de: 'Art der Erteilung (Opt-in)', en: 'Method of consent (opt-in)' },
      { de: 'Widerrufsbelehrung', en: 'Information about withdrawal' },
    ],
    isSpecialCategory: false,
  },
  {
    type: 'CONTRACT',
    article: 'Art. 6 Abs. 1 lit. b DSGVO',
    name: { de: 'Vertragserfüllung', en: 'Contract Performance' },
    shortName: { de: 'Vertrag', en: 'Contract' },
    description: {
      de: 'Die Verarbeitung ist für die Erfüllung eines Vertrags, dessen Vertragspartei die betroffene Person ist, oder zur Durchführung vorvertraglicher Maßnahmen erforderlich.',
      en: 'Processing is necessary for the performance of a contract to which the data subject is party or for pre-contractual measures.',
    },
    requirements: [
      { de: 'Vertrag besteht oder wird angebahnt', en: 'Contract exists or is being initiated' },
      { de: 'Verarbeitung ist für Erfüllung erforderlich', en: 'Processing is necessary for performance' },
      { de: 'Betroffene Person ist Vertragspartei', en: 'Data subject is a party to the contract' },
    ],
    suitableFor: ['Kundendaten', 'Bestellabwicklung', 'Lieferung', 'Rechnungsstellung', 'Kundenservice'],
    notSuitableFor: ['Marketing', 'Profiling', 'Weitergabe an Dritte ohne Vertragsbezug'],
    documentationNeeded: [
      { de: 'Vertrag oder AGB', en: 'Contract or T&C' },
      { de: 'Zusammenhang zur Verarbeitung', en: 'Connection to processing' },
    ],
    isSpecialCategory: false,
  },
  {
    type: 'LEGAL_OBLIGATION',
    article: 'Art. 6 Abs. 1 lit. c DSGVO',
    name: { de: 'Rechtliche Verpflichtung', en: 'Legal Obligation' },
    shortName: { de: 'Gesetz', en: 'Legal' },
    description: {
      de: 'Die Verarbeitung ist zur Erfüllung einer rechtlichen Verpflichtung erforderlich, der der Verantwortliche unterliegt.',
      en: 'Processing is necessary for compliance with a legal obligation to which the controller is subject.',
    },
    requirements: [
      { de: 'Rechtliche Verpflichtung im EU/nationalen Recht', en: 'Legal obligation in EU/national law' },
      { de: 'Verarbeitung ist zur Erfüllung erforderlich', en: 'Processing is necessary for compliance' },
      { de: 'Konkrete Rechtsgrundlage benennen', en: 'Cite specific legal basis' },
    ],
    suitableFor: ['Steuerliche Aufbewahrung', 'Sozialversicherung', 'AML/KYC', 'Meldepflichten'],
    notSuitableFor: ['Freiwillige Maßnahmen', 'Marketing'],
    documentationNeeded: [
      { de: 'Konkrete Rechtsvorschrift', en: 'Specific legal provision' },
      { de: 'HGB, AO, SGB, etc.', en: 'Commercial code, tax code, etc.' },
    ],
    isSpecialCategory: false,
  },
  {
    type: 'VITAL_INTEREST',
    article: 'Art. 6 Abs. 1 lit. d DSGVO',
    name: { de: 'Lebenswichtige Interessen', en: 'Vital Interests' },
    shortName: { de: 'Vital', en: 'Vital' },
    description: {
      de: 'Die Verarbeitung ist erforderlich, um lebenswichtige Interessen der betroffenen Person oder einer anderen natürlichen Person zu schützen.',
      en: 'Processing is necessary to protect the vital interests of the data subject or of another natural person.',
    },
    requirements: [
      { de: 'Gefahr für Leben oder Gesundheit', en: 'Danger to life or health' },
      { de: 'Keine andere Rechtsgrundlage möglich', en: 'No other legal basis possible' },
      { de: 'Subsidiär zu anderen Rechtsgrundlagen', en: 'Subsidiary to other legal bases' },
    ],
    suitableFor: ['Notfall', 'Medizinische Notversorgung', 'Katastrophenschutz'],
    notSuitableFor: ['Regelmäßige Verarbeitung', 'Vorsorgemaßnahmen'],
    documentationNeeded: [
      { de: 'Dokumentation des Notfalls', en: 'Documentation of emergency' },
      { de: 'Begründung der Erforderlichkeit', en: 'Justification of necessity' },
    ],
    isSpecialCategory: false,
    notes: {
      de: 'Sollte nur in Ausnahmefällen verwendet werden, wenn keine andere Rechtsgrundlage greift.',
      en: 'Should only be used in exceptional cases when no other legal basis applies.',
    },
  },
  {
    type: 'PUBLIC_TASK',
    article: 'Art. 6 Abs. 1 lit. e DSGVO',
    name: { de: 'Öffentliche Aufgabe', en: 'Public Task' },
    shortName: { de: 'Öffentlich', en: 'Public' },
    description: {
      de: 'Die Verarbeitung ist für die Wahrnehmung einer Aufgabe erforderlich, die im öffentlichen Interesse liegt oder in Ausübung öffentlicher Gewalt erfolgt.',
      en: 'Processing is necessary for the performance of a task carried out in the public interest or in the exercise of official authority.',
    },
    requirements: [
      { de: 'Öffentliches Interesse oder hoheitliche Aufgabe', en: 'Public interest or official authority' },
      { de: 'Rechtsgrundlage im EU/nationalen Recht', en: 'Legal basis in EU/national law' },
    ],
    suitableFor: ['Behörden', 'Öffentlich-rechtliche Einrichtungen', 'Bildungseinrichtungen'],
    notSuitableFor: ['Private Unternehmen (in der Regel)'],
    documentationNeeded: [
      { de: 'Rechtsgrundlage für öffentliche Aufgabe', en: 'Legal basis for public task' },
      { de: 'Zusammenhang zur Aufgabe', en: 'Connection to task' },
    ],
    isSpecialCategory: false,
  },
  {
    type: 'LEGITIMATE_INTEREST',
    article: 'Art. 6 Abs. 1 lit. f DSGVO',
    name: { de: 'Berechtigtes Interesse', en: 'Legitimate Interest' },
    shortName: { de: 'Ber. Interesse', en: 'Leg. Interest' },
    description: {
      de: 'Die Verarbeitung ist zur Wahrung der berechtigten Interessen des Verantwortlichen oder eines Dritten erforderlich, sofern nicht die Interessen oder Grundrechte der betroffenen Person überwiegen.',
      en: 'Processing is necessary for the legitimate interests pursued by the controller or a third party, except where such interests are overridden by the interests or rights of the data subject.',
    },
    requirements: [
      { de: 'Berechtigtes Interesse identifizieren', en: 'Identify legitimate interest' },
      { de: 'Erforderlichkeit prüfen', en: 'Check necessity' },
      { de: 'Interessenabwägung durchführen', en: 'Conduct balancing test' },
      { de: 'Dokumentieren', en: 'Document' },
    ],
    suitableFor: ['B2B-Marketing', 'IT-Sicherheit', 'Betrugsprävention', 'Konzerninterner Datenaustausch'],
    notSuitableFor: ['Behörden', 'Verarbeitung sensibler Daten', 'Wenn Einwilligung verweigert wurde'],
    documentationNeeded: [
      { de: 'Interessenabwägung (LIA)', en: 'Legitimate Interest Assessment (LIA)' },
      { de: 'Konkrete Interessen', en: 'Specific interests' },
      { de: 'Abwägung der Betroffenenrechte', en: 'Balancing of data subject rights' },
    ],
    isSpecialCategory: false,
    notes: {
      de: 'Nicht anwendbar für Behörden bei Aufgabenerfüllung. Interessenabwägung (LIA) erforderlich.',
      en: 'Not applicable for public authorities performing their tasks. Legitimate Interest Assessment (LIA) required.',
    },
  },

  // Art. 9 Abs. 2 DSGVO - Special categories
  {
    type: 'ART9_CONSENT',
    article: 'Art. 9 Abs. 2 lit. a DSGVO',
    name: { de: 'Ausdrückliche Einwilligung', en: 'Explicit Consent' },
    shortName: { de: 'Ausd. Einwilligung', en: 'Explicit Consent' },
    description: {
      de: 'Die betroffene Person hat in die Verarbeitung der besonderen Kategorien personenbezogener Daten ausdrücklich eingewilligt.',
      en: 'The data subject has given explicit consent to the processing of special categories of personal data.',
    },
    requirements: [
      { de: 'Alle Anforderungen der normalen Einwilligung', en: 'All requirements of normal consent' },
      { de: 'Zusätzlich: Ausdrücklich', en: 'Additionally: Explicit' },
      { de: 'Besonderer Hinweis auf sensible Daten', en: 'Special notice about sensitive data' },
    ],
    suitableFor: ['Gesundheitsdaten mit Einwilligung', 'Religiöse Daten mit Einwilligung'],
    notSuitableFor: ['Arbeitsverhältnis (in der Regel)', 'Wenn nationales Recht es verbietet'],
    documentationNeeded: [
      { de: 'Einwilligungstext mit Hinweis auf sensible Daten', en: 'Consent text with reference to sensitive data' },
      { de: 'Nachweis der ausdrücklichen Erteilung', en: 'Proof of explicit consent' },
    ],
    isSpecialCategory: true,
  },
  {
    type: 'ART9_EMPLOYMENT',
    article: 'Art. 9 Abs. 2 lit. b DSGVO',
    name: { de: 'Arbeitsrecht', en: 'Employment Law' },
    shortName: { de: 'Arbeitsrecht', en: 'Employment' },
    description: {
      de: 'Die Verarbeitung ist erforderlich für arbeitsrechtliche Zwecke auf Grundlage von nationalen Rechtsvorschriften.',
      en: 'Processing is necessary for employment law purposes based on national law provisions.',
    },
    requirements: [
      { de: 'Arbeitsrechtliche Grundlage (z.B. § 26 BDSG)', en: 'Employment law basis (e.g., § 26 BDSG)' },
      { de: 'Erforderlichkeit für Beschäftigung', en: 'Necessity for employment' },
      { de: 'Angemessene Garantien', en: 'Appropriate safeguards' },
    ],
    suitableFor: ['Gesundheitsdaten im Arbeitsverhältnis', 'Schwerbehinderung', 'Gewerkschaftszugehörigkeit'],
    notSuitableFor: ['Verarbeitung über das Erforderliche hinaus'],
    documentationNeeded: [
      { de: 'Rechtsgrundlage (§ 26 BDSG)', en: 'Legal basis (§ 26 BDSG)' },
      { de: 'Erforderlichkeit dokumentieren', en: 'Document necessity' },
    ],
    isSpecialCategory: true,
  },
  {
    type: 'ART9_VITAL_INTEREST',
    article: 'Art. 9 Abs. 2 lit. c DSGVO',
    name: { de: 'Lebenswichtige Interessen (Art. 9)', en: 'Vital Interests (Art. 9)' },
    shortName: { de: 'Vital (Art. 9)', en: 'Vital (Art. 9)' },
    description: {
      de: 'Die Verarbeitung ist zum Schutz lebenswichtiger Interessen erforderlich und die betroffene Person ist nicht einwilligungsfähig.',
      en: 'Processing is necessary to protect vital interests and the data subject is incapable of giving consent.',
    },
    requirements: [
      { de: 'Schutz lebenswichtiger Interessen', en: 'Protection of vital interests' },
      { de: 'Betroffene Person nicht einwilligungsfähig', en: 'Data subject incapable of consent' },
    ],
    suitableFor: ['Medizinische Notfälle', 'Bewusstlose Personen'],
    notSuitableFor: ['Regelmäßige Verarbeitung'],
    documentationNeeded: [
      { de: 'Dokumentation des Notfalls', en: 'Documentation of emergency' },
      { de: 'Nachweis der fehlenden Einwilligungsfähigkeit', en: 'Proof of incapacity to consent' },
    ],
    isSpecialCategory: true,
  },
  {
    type: 'ART9_HEALTH',
    article: 'Art. 9 Abs. 2 lit. h DSGVO',
    name: { de: 'Gesundheitsversorgung', en: 'Health Care' },
    shortName: { de: 'Gesundheit', en: 'Health' },
    description: {
      de: 'Die Verarbeitung ist für Zwecke der Gesundheitsvorsorge oder Arbeitsmedizin erforderlich, auf Grundlage von EU- oder nationalem Recht.',
      en: 'Processing is necessary for health care purposes or occupational medicine based on EU or national law.',
    },
    requirements: [
      { de: 'Gesundheitsvorsorge, Arbeitsmedizin', en: 'Health care, occupational medicine' },
      { de: 'Rechtsgrundlage im EU/nationalen Recht', en: 'Legal basis in EU/national law' },
      { de: 'Verarbeitung durch Fachpersonal', en: 'Processing by health professionals' },
      { de: 'Berufsgeheimnis beachten', en: 'Professional secrecy' },
    ],
    suitableFor: ['Medizinische Behandlung', 'Betriebsärztliche Untersuchungen', 'Gesundheitsmanagement'],
    notSuitableFor: ['Verarbeitung ohne medizinischen Kontext'],
    documentationNeeded: [
      { de: 'Rechtsgrundlage', en: 'Legal basis' },
      { de: 'Fachliche Zuständigkeit', en: 'Professional competence' },
    ],
    isSpecialCategory: true,
  },
  {
    type: 'ART9_PUBLIC_HEALTH',
    article: 'Art. 9 Abs. 2 lit. i DSGVO',
    name: { de: 'Öffentliche Gesundheit', en: 'Public Health' },
    shortName: { de: 'Öff. Gesundheit', en: 'Public Health' },
    description: {
      de: 'Die Verarbeitung ist aus Gründen des öffentlichen Interesses im Bereich der öffentlichen Gesundheit erforderlich.',
      en: 'Processing is necessary for reasons of public interest in the area of public health.',
    },
    requirements: [
      { de: 'Öffentliches Interesse an öffentlicher Gesundheit', en: 'Public interest in public health' },
      { de: 'Rechtsgrundlage im EU/nationalen Recht', en: 'Legal basis in EU/national law' },
      { de: 'Angemessene Garantien', en: 'Appropriate safeguards' },
    ],
    suitableFor: ['Pandemiebekämpfung', 'Seuchenprävention', 'Qualitätssicherung im Gesundheitswesen'],
    notSuitableFor: ['Private Interessen'],
    documentationNeeded: [
      { de: 'Rechtsgrundlage', en: 'Legal basis' },
      { de: 'Nachweis öffentliches Interesse', en: 'Proof of public interest' },
    ],
    isSpecialCategory: true,
  },
  {
    type: 'ART9_LEGAL_CLAIMS',
    article: 'Art. 9 Abs. 2 lit. f DSGVO',
    name: { de: 'Rechtsansprüche', en: 'Legal Claims' },
    shortName: { de: 'Rechtsansprüche', en: 'Legal Claims' },
    description: {
      de: 'Die Verarbeitung ist zur Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen erforderlich.',
      en: 'Processing is necessary for the establishment, exercise or defence of legal claims.',
    },
    requirements: [
      { de: 'Rechtsansprüche bestehen oder drohen', en: 'Legal claims exist or are anticipated' },
      { de: 'Verarbeitung ist erforderlich', en: 'Processing is necessary' },
    ],
    suitableFor: ['Rechtsstreitigkeiten', 'Compliance-Untersuchungen', 'Interne Ermittlungen'],
    notSuitableFor: ['Präventive Maßnahmen ohne konkreten Anlass'],
    documentationNeeded: [
      { de: 'Dokumentation des Rechtsstreits/Anspruchs', en: 'Documentation of legal dispute/claim' },
      { de: 'Erforderlichkeit der Verarbeitung', en: 'Necessity of processing' },
    ],
    isSpecialCategory: true,
  },
]

// ==========================================
// RETENTION PERIODS
// ==========================================

export const STANDARD_RETENTION_PERIODS: RetentionPeriodInfo[] = [
  // Handelsrechtliche Aufbewahrung
  {
    id: 'hgb-257',
    name: { de: 'Handelsbücher und Buchungsbelege', en: 'Commercial Books and Vouchers' },
    legalBasis: '§ 257 HGB',
    duration: { value: 10, unit: 'YEARS' },
    description: {
      de: 'Handelsbücher, Inventare, Eröffnungsbilanzen, Jahresabschlüsse, Lageberichte, Konzernabschlüsse, Buchungsbelege',
      en: 'Commercial books, inventories, opening balance sheets, annual financial statements, management reports, consolidated financial statements, accounting vouchers',
    },
    applicableTo: ['Buchhaltung', 'Jahresabschlüsse', 'Rechnungen', 'Verträge'],
  },
  {
    id: 'hgb-257-6',
    name: { de: 'Handels- und Geschäftsbriefe', en: 'Commercial and Business Correspondence' },
    legalBasis: '§ 257 Abs. 1 Nr. 2, 3 HGB',
    duration: { value: 6, unit: 'YEARS' },
    description: {
      de: 'Empfangene Handels- und Geschäftsbriefe, Wiedergaben der abgesandten Handels- und Geschäftsbriefe',
      en: 'Received commercial and business correspondence, copies of sent correspondence',
    },
    applicableTo: ['Geschäftskorrespondenz', 'Angebote', 'Auftragsbestätigungen'],
  },
  // Steuerrechtliche Aufbewahrung
  {
    id: 'ao-147',
    name: { de: 'Steuerrechtliche Unterlagen', en: 'Tax Documents' },
    legalBasis: '§ 147 AO',
    duration: { value: 10, unit: 'YEARS' },
    description: {
      de: 'Bücher und Aufzeichnungen, Inventare, Jahresabschlüsse, Buchungsbelege, steuerrelevante Unterlagen',
      en: 'Books and records, inventories, annual financial statements, accounting vouchers, tax-relevant documents',
    },
    applicableTo: ['Steuererklärungen', 'Buchhaltung', 'Belege'],
  },
  // Arbeitsrechtliche Aufbewahrung
  {
    id: 'arbeitsrecht-personal',
    name: { de: 'Personalunterlagen', en: 'Personnel Records' },
    legalBasis: 'Verschiedene (AGG, ArbZG, etc.)',
    duration: { value: 3, unit: 'YEARS' },
    description: {
      de: 'Personalakte nach Beendigung des Arbeitsverhältnisses (Regelverjährung)',
      en: 'Personnel file after termination of employment (standard limitation period)',
    },
    applicableTo: ['Personalakten', 'Arbeitsverträge', 'Zeugnisse'],
  },
  {
    id: 'arbzg',
    name: { de: 'Arbeitszeitaufzeichnungen', en: 'Working Time Records' },
    legalBasis: '§ 16 Abs. 2 ArbZG',
    duration: { value: 2, unit: 'YEARS' },
    description: {
      de: 'Aufzeichnungen über Arbeitszeiten, die über 8 Stunden hinausgehen',
      en: 'Records of working hours exceeding 8 hours',
    },
    applicableTo: ['Zeiterfassung', 'Überstunden'],
  },
  {
    id: 'lohnsteuer',
    name: { de: 'Lohnunterlagen', en: 'Payroll Documents' },
    legalBasis: '§ 41 EStG, § 28f SGB IV',
    duration: { value: 6, unit: 'YEARS' },
    description: {
      de: 'Lohnkonten und Unterlagen für den Lohnsteuerabzug',
      en: 'Payroll accounts and documents for wage tax deduction',
    },
    applicableTo: ['Lohnabrechnungen', 'Lohnsteuerbescheinigungen'],
  },
  {
    id: 'sozialversicherung',
    name: { de: 'Sozialversicherungsunterlagen', en: 'Social Security Documents' },
    legalBasis: '§ 28f SGB IV',
    duration: { value: 5, unit: 'YEARS' },
    description: {
      de: 'Unterlagen zum Gesamtsozialversicherungsbeitrag',
      en: 'Documents for total social security contributions',
    },
    applicableTo: ['Sozialversicherungsmeldungen', 'Beitragsnachweise'],
  },
  // Bewerberdaten
  {
    id: 'bewerbung',
    name: { de: 'Bewerbungsunterlagen', en: 'Application Documents' },
    legalBasis: '§ 15 Abs. 4 AGG',
    duration: { value: 6, unit: 'MONTHS' },
    description: {
      de: 'Bewerbungsunterlagen nach Absage (AGG-Frist)',
      en: 'Application documents after rejection (AGG deadline)',
    },
    applicableTo: ['Bewerbungen', 'Lebensläufe', 'Zeugnisse von Bewerbern'],
  },
  // Datenschutzrechtliche Fristen
  {
    id: 'einwilligung',
    name: { de: 'Einwilligungen', en: 'Consents' },
    legalBasis: 'Art. 7 Abs. 1 DSGVO',
    duration: { value: 3, unit: 'YEARS' },
    description: {
      de: 'Dokumentation der Einwilligung (Regelverjährung)',
      en: 'Documentation of consent (standard limitation period)',
    },
    applicableTo: ['Einwilligungsnachweise', 'Opt-in-Dokumentation'],
  },
  {
    id: 'videoüberwachung',
    name: { de: 'Videoüberwachung', en: 'Video Surveillance' },
    legalBasis: 'Verhältnismäßigkeit',
    duration: { value: 72, unit: 'DAYS' },
    description: {
      de: 'Videoaufnahmen (max. 72 Stunden, sofern kein Vorfall)',
      en: 'Video recordings (max. 72 hours, unless incident occurred)',
    },
    applicableTo: ['CCTV-Aufnahmen', 'Überwachungsvideos'],
  },
  // Löschung nach Vertrag
  {
    id: 'avv-loeschung',
    name: { de: 'AVV-Daten nach Vertragsende', en: 'DPA Data after Contract End' },
    legalBasis: 'Art. 28 Abs. 3 lit. g DSGVO',
    duration: { value: 30, unit: 'DAYS' },
    description: {
      de: 'Löschung oder Rückgabe aller personenbezogenen Daten nach Vertragsende',
      en: 'Deletion or return of all personal data after contract end',
    },
    applicableTo: ['Auftragsverarbeitung', 'Dienstleister-Daten'],
  },
]

// ==========================================
// HELPER FUNCTIONS
// ==========================================

/**
 * Get legal basis info by type
 */
export function getLegalBasisInfo(type: LegalBasisType): LegalBasisInfo | undefined {
  return LEGAL_BASIS_INFO.find((lb) => lb.type === type)
}

/**
 * Get legal bases for standard data (non-special categories)
 */
export function getStandardLegalBases(): LegalBasisInfo[] {
  return LEGAL_BASIS_INFO.filter((lb) => !lb.isSpecialCategory)
}

/**
 * Get legal bases for special category data (Art. 9)
 */
export function getSpecialCategoryLegalBases(): LegalBasisInfo[] {
  return LEGAL_BASIS_INFO.filter((lb) => lb.isSpecialCategory)
}

/**
 * Get appropriate legal bases for data categories
 */
export function getAppropriateLegalBases(
  dataCategories: PersonalDataCategory[]
): LegalBasisInfo[] {
  const hasSpecialCategory = dataCategories.some((cat) =>
    [
      'HEALTH_DATA', 'GENETIC_DATA', 'BIOMETRIC_DATA', 'RACIAL_ETHNIC',
      'POLITICAL_OPINIONS', 'RELIGIOUS_BELIEFS', 'TRADE_UNION', 'SEX_LIFE',
    ].includes(cat)
  )

  if (hasSpecialCategory) {
    // Return Art. 9 bases plus compatible Art. 6 bases
    return [
      ...getSpecialCategoryLegalBases(),
      ...getStandardLegalBases().filter((lb) =>
        ['LEGAL_OBLIGATION', 'VITAL_INTEREST', 'PUBLIC_TASK'].includes(lb.type)
      ),
    ]
  }

  return getStandardLegalBases()
}

/**
 * Get retention period by ID
 */
export function getRetentionPeriod(id: string): RetentionPeriodInfo | undefined {
  return STANDARD_RETENTION_PERIODS.find((rp) => rp.id === id)
}

/**
 * Get retention periods applicable to a category
 */
export function getRetentionPeriodsForCategory(category: string): RetentionPeriodInfo[] {
  return STANDARD_RETENTION_PERIODS.filter((rp) =>
    rp.applicableTo.some((a) => a.toLowerCase().includes(category.toLowerCase()))
  )
}

/**
 * Get longest applicable retention period
 */
export function getLongestRetentionPeriod(categories: string[]): RetentionPeriodInfo | undefined {
  const applicable = categories.flatMap((cat) => getRetentionPeriodsForCategory(cat))

  if (applicable.length === 0) return undefined

  return applicable.reduce((longest, current) => {
    const longestMonths = toMonths(longest.duration)
    const currentMonths = toMonths(current.duration)
    return currentMonths > longestMonths ? current : longest
  })
}

function toMonths(duration: { value: number; unit: 'DAYS' | 'MONTHS' | 'YEARS' }): number {
  switch (duration.unit) {
    case 'DAYS':
      return duration.value / 30
    case 'MONTHS':
      return duration.value
    case 'YEARS':
      return duration.value * 12
  }
}

/**
 * Format retention period for display
 */
export function formatRetentionPeriod(
  duration: { value: number; unit: 'DAYS' | 'MONTHS' | 'YEARS' },
  locale: 'de' | 'en' = 'de'
): string {
  const units = {
    de: { DAYS: 'Tage', MONTHS: 'Monate', YEARS: 'Jahre' },
    en: { DAYS: 'days', MONTHS: 'months', YEARS: 'years' },
  }

  return `${duration.value} ${units[locale][duration.unit]}`
}
