/**
 * DSFA Core Types - Base enums, type aliases, and constants
 *
 * SDM goals, status labels, risk levels, legal bases, affected rights.
 */

// =============================================================================
// SDM GEWAEHRLEISTUNGSZIELE (Standard-Datenschutzmodell V2.0)
// =============================================================================

export type SDMGoal =
  | 'datenminimierung'
  | 'verfuegbarkeit'
  | 'integritaet'
  | 'vertraulichkeit'
  | 'nichtverkettung'
  | 'transparenz'
  | 'intervenierbarkeit'

export const SDM_GOALS: Record<SDMGoal, { name: string; description: string; article: string }> = {
  datenminimierung: {
    name: 'Datenminimierung',
    description: 'Verarbeitung personenbezogener Daten auf das dem Zweck angemessene, erhebliche und notwendige Mass beschraenken.',
    article: 'Art. 5 Abs. 1 lit. c DSGVO',
  },
  verfuegbarkeit: {
    name: 'Verfuegbarkeit',
    description: 'Personenbezogene Daten muessen dem Verantwortlichen zur Verfuegung stehen und ordnungsgemaess im vorgesehenen Prozess verwendet werden koennen.',
    article: 'Art. 32 Abs. 1 lit. b DSGVO',
  },
  integritaet: {
    name: 'Integritaet',
    description: 'Personenbezogene Daten bleiben waehrend der Verarbeitung unversehrt, vollstaendig und aktuell.',
    article: 'Art. 5 Abs. 1 lit. d DSGVO',
  },
  vertraulichkeit: {
    name: 'Vertraulichkeit',
    description: 'Kein unbefugter Zugriff auf personenbezogene Daten. Nur befugte Personen koennen auf Daten zugreifen.',
    article: 'Art. 32 Abs. 1 lit. b DSGVO',
  },
  nichtverkettung: {
    name: 'Nichtverkettung',
    description: 'Personenbezogene Daten duerfen nicht ohne Weiteres fuer einen anderen als den erhobenen Zweck zusammengefuehrt werden (Zweckbindung).',
    article: 'Art. 5 Abs. 1 lit. b DSGVO',
  },
  transparenz: {
    name: 'Transparenz',
    description: 'Die Verarbeitung personenbezogener Daten muss fuer Betroffene und Aufsichtsbehoerden nachvollziehbar sein.',
    article: 'Art. 5 Abs. 1 lit. a DSGVO',
  },
  intervenierbarkeit: {
    name: 'Intervenierbarkeit',
    description: 'Den Betroffenen werden wirksame Moeglichkeiten der Einflussnahme (Auskunft, Berichtigung, Loeschung, Widerspruch) auf die Verarbeitung gewaehrt.',
    article: 'Art. 15-21 DSGVO',
  },
}

// =============================================================================
// ENUMS & CONSTANTS
// =============================================================================

export type DSFAStatus = 'draft' | 'in_review' | 'approved' | 'rejected' | 'needs_update'

export type DSFARiskLevel = 'low' | 'medium' | 'high' | 'very_high'

export type DSFARiskCategory = 'confidentiality' | 'integrity' | 'availability' | 'rights_freedoms'

export type DSFAMitigationType = 'technical' | 'organizational' | 'legal'

export type DSFAMitigationStatus = 'planned' | 'in_progress' | 'implemented' | 'verified'

export const DSFA_STATUS_LABELS: Record<DSFAStatus, string> = {
  draft: 'Entwurf',
  in_review: 'In Prüfung',
  approved: 'Genehmigt',
  rejected: 'Abgelehnt',
  needs_update: 'Überarbeitung erforderlich',
}

export const DSFA_RISK_LEVEL_LABELS: Record<DSFARiskLevel, string> = {
  low: 'Niedrig',
  medium: 'Mittel',
  high: 'Hoch',
  very_high: 'Sehr Hoch',
}

export const DSFA_LEGAL_BASES = {
  consent: 'Art. 6 Abs. 1 lit. a DSGVO - Einwilligung',
  contract: 'Art. 6 Abs. 1 lit. b DSGVO - Vertrag',
  legal_obligation: 'Art. 6 Abs. 1 lit. c DSGVO - Rechtliche Verpflichtung',
  vital_interests: 'Art. 6 Abs. 1 lit. d DSGVO - Lebenswichtige Interessen',
  public_interest: 'Art. 6 Abs. 1 lit. e DSGVO - Öffentliches Interesse',
  legitimate_interest: 'Art. 6 Abs. 1 lit. f DSGVO - Berechtigtes Interesse',
}

export const DSFA_AFFECTED_RIGHTS = [
  { id: 'right_to_information', label: 'Recht auf Information (Art. 13/14)' },
  { id: 'right_of_access', label: 'Auskunftsrecht (Art. 15)' },
  { id: 'right_to_rectification', label: 'Recht auf Berichtigung (Art. 16)' },
  { id: 'right_to_erasure', label: 'Recht auf Löschung (Art. 17)' },
  { id: 'right_to_restriction', label: 'Recht auf Einschränkung (Art. 18)' },
  { id: 'right_to_data_portability', label: 'Recht auf Datenübertragbarkeit (Art. 20)' },
  { id: 'right_to_object', label: 'Widerspruchsrecht (Art. 21)' },
  { id: 'right_not_to_be_profiled', label: 'Recht bzgl. Profiling (Art. 22)' },
  { id: 'freedom_of_expression', label: 'Meinungsfreiheit' },
  { id: 'freedom_of_association', label: 'Versammlungsfreiheit' },
  { id: 'non_discrimination', label: 'Nichtdiskriminierung' },
  { id: 'data_security', label: 'Datensicherheit' },
]
