// =============================================================================
// CONSTANTS - CATEGORY METADATA & LEGAL BASIS INFO
// =============================================================================

import type { DataPointCategory, LegalBasis, RetentionPeriod, RiskLevel } from './enums'
import type { LocalizedText } from './data-point'
import type { CategoryMetadata } from './helpers'

/**
 * Mapping von Kategorie zu Metadaten (18 Kategorien)
 */
export const CATEGORY_METADATA: Record<DataPointCategory, CategoryMetadata> = {
  MASTER_DATA: {
    id: 'MASTER_DATA',
    code: 'A',
    name: { de: 'Stammdaten', en: 'Master Data' },
    description: { de: 'Grundlegende personenbezogene Daten', en: 'Basic personal data' },
    icon: 'User',
    color: 'blue'
  },
  CONTACT_DATA: {
    id: 'CONTACT_DATA',
    code: 'B',
    name: { de: 'Kontaktdaten', en: 'Contact Data' },
    description: { de: 'Kontaktinformationen und Erreichbarkeit', en: 'Contact information and availability' },
    icon: 'Mail',
    color: 'sky'
  },
  AUTHENTICATION: {
    id: 'AUTHENTICATION',
    code: 'C',
    name: { de: 'Authentifizierungsdaten', en: 'Authentication Data' },
    description: { de: 'Daten zur Benutzeranmeldung und Session-Verwaltung', en: 'Data for user login and session management' },
    icon: 'Key',
    color: 'slate'
  },
  CONSENT: {
    id: 'CONSENT',
    code: 'D',
    name: { de: 'Einwilligungsdaten', en: 'Consent Data' },
    description: { de: 'Einwilligungen und Datenschutzpraeferenzen', en: 'Consents and privacy preferences' },
    icon: 'CheckCircle',
    color: 'green'
  },
  COMMUNICATION: {
    id: 'COMMUNICATION',
    code: 'E',
    name: { de: 'Kommunikationsdaten', en: 'Communication Data' },
    description: { de: 'Kundenservice und Kommunikationsdaten', en: 'Customer service and communication data' },
    icon: 'MessageSquare',
    color: 'cyan'
  },
  PAYMENT: {
    id: 'PAYMENT',
    code: 'F',
    name: { de: 'Zahlungsdaten', en: 'Payment Data' },
    description: { de: 'Rechnungs- und Zahlungsinformationen', en: 'Billing and payment information' },
    icon: 'CreditCard',
    color: 'amber'
  },
  USAGE_DATA: {
    id: 'USAGE_DATA',
    code: 'G',
    name: { de: 'Nutzungsdaten', en: 'Usage Data' },
    description: { de: 'Daten zur Nutzung des Dienstes', en: 'Data about service usage' },
    icon: 'Activity',
    color: 'violet'
  },
  LOCATION: {
    id: 'LOCATION',
    code: 'H',
    name: { de: 'Standortdaten', en: 'Location Data' },
    description: { de: 'Geografische Standortinformationen', en: 'Geographic location information' },
    icon: 'MapPin',
    color: 'emerald'
  },
  DEVICE_DATA: {
    id: 'DEVICE_DATA',
    code: 'I',
    name: { de: 'Geraetedaten', en: 'Device Data' },
    description: { de: 'Technische Geraete- und Browserinformationen', en: 'Technical device and browser information' },
    icon: 'Smartphone',
    color: 'zinc'
  },
  MARKETING: {
    id: 'MARKETING',
    code: 'J',
    name: { de: 'Marketingdaten', en: 'Marketing Data' },
    description: { de: 'Marketing- und Werbedaten', en: 'Marketing and advertising data' },
    icon: 'Megaphone',
    color: 'purple'
  },
  ANALYTICS: {
    id: 'ANALYTICS',
    code: 'K',
    name: { de: 'Analysedaten', en: 'Analytics Data' },
    description: { de: 'Web-Analyse und Nutzungsstatistiken', en: 'Web analytics and usage statistics' },
    icon: 'BarChart3',
    color: 'indigo'
  },
  SOCIAL_MEDIA: {
    id: 'SOCIAL_MEDIA',
    code: 'L',
    name: { de: 'Social-Media-Daten', en: 'Social Media Data' },
    description: { de: 'Daten aus sozialen Netzwerken', en: 'Data from social networks' },
    icon: 'Share2',
    color: 'pink'
  },
  HEALTH_DATA: {
    id: 'HEALTH_DATA',
    code: 'M',
    name: { de: 'Gesundheitsdaten', en: 'Health Data' },
    description: { de: 'Besondere Kategorie nach Art. 9 DSGVO - Gesundheitsbezogene Daten', en: 'Special category under Art. 9 GDPR - Health-related data' },
    icon: 'Heart',
    color: 'rose'
  },
  EMPLOYEE_DATA: {
    id: 'EMPLOYEE_DATA',
    code: 'N',
    name: { de: 'Beschaeftigtendaten', en: 'Employee Data' },
    description: { de: 'Personalverwaltung und Arbeitnehmerinformationen (BDSG § 26)', en: 'HR management and employee information' },
    icon: 'Briefcase',
    color: 'orange'
  },
  CONTRACT_DATA: {
    id: 'CONTRACT_DATA',
    code: 'O',
    name: { de: 'Vertragsdaten', en: 'Contract Data' },
    description: { de: 'Vertragsinformationen und -dokumente', en: 'Contract information and documents' },
    icon: 'FileText',
    color: 'teal'
  },
  LOG_DATA: {
    id: 'LOG_DATA',
    code: 'P',
    name: { de: 'Protokolldaten', en: 'Log Data' },
    description: { de: 'System- und Zugriffsprotokolle', en: 'System and access logs' },
    icon: 'FileCode',
    color: 'gray'
  },
  AI_DATA: {
    id: 'AI_DATA',
    code: 'Q',
    name: { de: 'KI-Daten', en: 'AI Data' },
    description: { de: 'KI-Interaktionen, Prompts und generierte Inhalte (AI Act)', en: 'AI interactions, prompts and generated content (AI Act)' },
    icon: 'Bot',
    color: 'fuchsia'
  },
  SECURITY: {
    id: 'SECURITY',
    code: 'R',
    name: { de: 'Sicherheitsdaten', en: 'Security Data' },
    description: { de: 'Sicherheitsrelevante Daten und Vorfallberichte', en: 'Security-relevant data and incident reports' },
    icon: 'Shield',
    color: 'red'
  }
}

/**
 * Mapping von Rechtsgrundlage zu Beschreibung
 */
export const LEGAL_BASIS_INFO: Record<LegalBasis, { article: string; name: LocalizedText; description: LocalizedText }> = {
  CONTRACT: {
    article: 'Art. 6 Abs. 1 lit. b DSGVO',
    name: { de: 'Vertragserfuellung', en: 'Contract Performance' },
    description: {
      de: 'Die Verarbeitung ist erforderlich fuer die Erfuellung eines Vertrags oder zur Durchfuehrung vorvertraglicher Massnahmen.',
      en: 'Processing is necessary for the performance of a contract or pre-contractual measures.'
    }
  },
  CONSENT: {
    article: 'Art. 6 Abs. 1 lit. a DSGVO',
    name: { de: 'Einwilligung', en: 'Consent' },
    description: {
      de: 'Die betroffene Person hat ihre Einwilligung zu der Verarbeitung gegeben.',
      en: 'The data subject has given consent to the processing.'
    }
  },
  EXPLICIT_CONSENT: {
    article: 'Art. 9 Abs. 2 lit. a DSGVO',
    name: { de: 'Ausdrueckliche Einwilligung', en: 'Explicit Consent' },
    description: {
      de: 'Die betroffene Person hat ausdruecklich in die Verarbeitung besonderer Kategorien personenbezogener Daten (Art. 9 DSGVO) eingewilligt. Dies betrifft Gesundheitsdaten, biometrische Daten, Daten zur ethnischen Herkunft, politische Meinungen, religiöse Überzeugungen etc.',
      en: 'The data subject has given explicit consent to the processing of special categories of personal data (Art. 9 GDPR). This includes health data, biometric data, racial or ethnic origin, political opinions, religious beliefs, etc.'
    }
  },
  LEGITIMATE_INTEREST: {
    article: 'Art. 6 Abs. 1 lit. f DSGVO',
    name: { de: 'Berechtigtes Interesse', en: 'Legitimate Interest' },
    description: {
      de: 'Die Verarbeitung ist zur Wahrung berechtigter Interessen des Verantwortlichen erforderlich.',
      en: 'Processing is necessary for legitimate interests pursued by the controller.'
    }
  },
  LEGAL_OBLIGATION: {
    article: 'Art. 6 Abs. 1 lit. c DSGVO',
    name: { de: 'Rechtliche Verpflichtung', en: 'Legal Obligation' },
    description: {
      de: 'Die Verarbeitung ist zur Erfuellung einer rechtlichen Verpflichtung erforderlich.',
      en: 'Processing is necessary for compliance with a legal obligation.'
    }
  },
  VITAL_INTERESTS: {
    article: 'Art. 6 Abs. 1 lit. d DSGVO',
    name: { de: 'Lebenswichtige Interessen', en: 'Vital Interests' },
    description: {
      de: 'Die Verarbeitung ist erforderlich, um lebenswichtige Interessen der betroffenen Person oder einer anderen natuerlichen Person zu schuetzen.',
      en: 'Processing is necessary to protect the vital interests of the data subject or another natural person.'
    }
  },
  PUBLIC_INTEREST: {
    article: 'Art. 6 Abs. 1 lit. e DSGVO',
    name: { de: 'Oeffentliches Interesse', en: 'Public Interest' },
    description: {
      de: 'Die Verarbeitung ist fuer die Wahrnehmung einer Aufgabe erforderlich, die im oeffentlichen Interesse liegt oder in Ausuebung oeffentlicher 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.'
    }
  }
}

/**
 * Mapping von Aufbewahrungsfrist zu Beschreibung
 */
export const RETENTION_PERIOD_INFO: Record<RetentionPeriod, { label: LocalizedText; days: number | null }> = {
  '24_HOURS': { label: { de: '24 Stunden', en: '24 Hours' }, days: 1 },
  '30_DAYS': { label: { de: '30 Tage', en: '30 Days' }, days: 30 },
  '90_DAYS': { label: { de: '90 Tage', en: '90 Days' }, days: 90 },
  '12_MONTHS': { label: { de: '12 Monate', en: '12 Months' }, days: 365 },
  '24_MONTHS': { label: { de: '24 Monate', en: '24 Months' }, days: 730 },
  '26_MONTHS': { label: { de: '26 Monate (Google Analytics)', en: '26 Months (Google Analytics)' }, days: 790 },
  '36_MONTHS': { label: { de: '36 Monate', en: '36 Months' }, days: 1095 },
  '48_MONTHS': { label: { de: '48 Monate', en: '48 Months' }, days: 1460 },
  '6_YEARS': { label: { de: '6 Jahre', en: '6 Years' }, days: 2190 },
  '10_YEARS': { label: { de: '10 Jahre', en: '10 Years' }, days: 3650 },
  'UNTIL_REVOCATION': { label: { de: 'Bis Widerruf', en: 'Until Revocation' }, days: null },
  'UNTIL_PURPOSE_FULFILLED': { label: { de: 'Bis Zweckerfuellung', en: 'Until Purpose Fulfilled' }, days: null },
  'UNTIL_ACCOUNT_DELETION': { label: { de: 'Bis Kontoschliessung', en: 'Until Account Deletion' }, days: null }
}

/**
 * Risk Level Styling
 */
export const RISK_LEVEL_STYLING: Record<RiskLevel, { label: LocalizedText; color: string; bgColor: string }> = {
  LOW: {
    label: { de: 'Niedrig', en: 'Low' },
    color: 'text-green-700',
    bgColor: 'bg-green-100'
  },
  MEDIUM: {
    label: { de: 'Mittel', en: 'Medium' },
    color: 'text-yellow-700',
    bgColor: 'bg-yellow-100'
  },
  HIGH: {
    label: { de: 'Hoch', en: 'High' },
    color: 'text-red-700',
    bgColor: 'bg-red-100'
  }
}
