/**
 * Kern-Typen des AI-Act-Kompass.
 *
 * Alle Datenstrukturen sind unveränderlich gedacht (immutable) —
 * Funktionen geben neue Objekte zurück statt zu mutieren.
 */

/** Rolle des Unternehmens in Bezug auf das KI-System (Art. 3 AI Act). */
export type Role = 'provider' | 'deployer' | 'importer' | 'distributor';

/** Risikoklasse nach EU AI Act. */
export type RiskClass =
  | 'out-of-scope'
  | 'prohibited'
  | 'high'
  | 'limited'
  | 'minimal';

/** Antworten des Bewertungs-Wizards für ein einzelnes KI-System. */
export interface AssessmentAnswers {
  /** Erfüllt das System die KI-Definition nach Art. 3 Nr. 1? */
  readonly isAISystem: boolean;
  /** Rolle des Unternehmens für dieses System. */
  readonly role: Role;
  /** Handelt es sich (auch) um ein GPAI-Modell (Art. 51 ff.)? */
  readonly isGPAIModel: boolean;
  /** IDs der zutreffenden verbotenen Praktiken (Art. 5). */
  readonly prohibitedPractices: readonly string[];
  /** IDs der zutreffenden Annex-III-Hochrisiko-Bereiche. */
  readonly annexIIICategories: readonly string[];
  /** Greift die Ausnahme nach Art. 6 Abs. 3 (eng begrenzte Aufgabe)? */
  readonly art63Exception: boolean;
  /** Führt das System Profiling natürlicher Personen durch? */
  readonly involvesProfiling: boolean;
  /** Sicherheitsbauteil eines regulierten Produkts (Annex I)? */
  readonly isAnnexISafetyComponent: boolean;
  /** IDs der zutreffenden Transparenzpflichten-Auslöser (Art. 50). */
  readonly transparencyTriggers: readonly string[];
}

/** Ergebnis der Risikoklassifizierung. */
export interface Classification {
  readonly riskClass: RiskClass;
  /** Begründungen in Prüfreihenfolge (menschenlesbar, Deutsch). */
  readonly reasons: readonly string[];
  /** Zusätzlich GPAI-Pflichten (Art. 53 ff.) relevant? */
  readonly gpaiObligations: boolean;
  /** Transparenzpflichten nach Art. 50 zusätzlich anwendbar? */
  readonly transparencyDuties: boolean;
  /** Dokumentationspflicht nach Art. 6 Abs. 4 (Ausnahme in Anspruch genommen)? */
  readonly art64DocumentationDuty: boolean;
}

/** Eine konkrete Pflicht aus dem AI Act. */
export interface Obligation {
  readonly id: string;
  readonly title: string;
  readonly articles: string;
  readonly description: string;
  /** ISO-Datum der maßgeblichen Geltungsfrist. */
  readonly deadline: string;
  readonly roles: readonly Role[];
  readonly riskClasses: readonly RiskClass[];
}

/** Status einer Pflicht in der Umsetzung durch den Nutzer. */
export type ObligationStatus = 'open' | 'in-progress' | 'done' | 'not-applicable';

/** Ein registriertes KI-System im Inventar. */
export interface AISystem {
  readonly id: string;
  readonly name: string;
  readonly purpose: string;
  readonly vendor: string;
  readonly owner: string;
  readonly createdAt: string;
  readonly updatedAt: string;
  readonly answers: AssessmentAnswers;
  readonly classification: Classification;
  /** Umsetzungsstatus je Pflicht-ID. */
  readonly obligationStatus: Readonly<Record<string, ObligationStatus>>;
}

/** Firmenprofil für personalisierte Berichte (Briefkopf, PDF-Druck). */
export interface CompanyProfile {
  readonly name: string;
  readonly street: string;
  readonly zipCity: string;
  readonly contactPerson: string;
  readonly email: string;
  readonly phone: string;
  readonly website: string;
  /** Logo als Data-URL (bleibt lokal im Browser), leer = kein Logo. */
  readonly logoDataUrl: string;
  /** ISO-Ländercodes der aktivierten nationalen Anforderungsmodule (z. B. "DE"). */
  readonly countries: readonly string[];
}

/** Eintrag im regulatorischen Content-Pack (Checklisten-Item mit Rechtsgrundlage). */
export interface ContentItem {
  readonly id: string;
  readonly label: string;
  readonly legalRef: string;
  readonly hint?: string;
}

/** Wichtige Geltungsfrist des AI Act. */
export interface Deadline {
  readonly id: string;
  readonly date: string;
  readonly label: string;
  readonly description: string;
}

/** Nationales Anforderungsmodul eines EU-Mitgliedstaats. */
export interface NationalPack {
  /** ISO-3166-Ländercode, z. B. "DE". */
  readonly code: string;
  readonly country: string;
  /** Zuständige Aufsichts-/Marktüberwachungsbehörde(n). */
  readonly authority: string;
  /** Zusätzliche nationale Pflichten (Rechtsgrundlage im Feld articles). */
  readonly items: readonly Obligation[];
}

/** Versionierter regulatorischer Content-Pack. */
export interface ContentPack {
  readonly version: string;
  readonly releasedAt: string;
  readonly legalBasis: string;
  readonly prohibitedPractices: readonly ContentItem[];
  readonly annexIIICategories: readonly ContentItem[];
  readonly transparencyTriggers: readonly ContentItem[];
  readonly aiDefinitionCriteria: readonly ContentItem[];
  readonly obligations: readonly Obligation[];
  readonly deadlines: readonly Deadline[];
  /** Nationale Zusatzanforderungen der EU-Mitgliedstaaten. */
  readonly national: readonly NationalPack[];
}
