import type {
  ContentItem,
  ContentPack,
  Deadline,
  NationalPack,
  Obligation,
} from '../engine/types';
import { resolveText } from '../i18n/types';
import type { Locale, LText } from '../i18n/types';
import {
  AI_DEFINITION_CRITERIA,
  ANNEX_III_CATEGORIES,
  DEADLINES,
  PROHIBITED_PRACTICES,
  TRANSPARENCY_TRIGGERS,
} from './packCore';
import { NATIONAL_PACKS } from './packNational';
import { OBLIGATIONS } from './packObligations';
import type { ContentItemSrc, DeadlineSrc, NationalPackSrc, ObligationSrc } from './sourceTypes';

/**
 * Regulatorischer Content-Pack v2026.07.
 *
 * Kodifiziert den Stand der Verordnung (EU) 2024/1689 (AI Act) inkl. der
 * durch das Digital-Omnibus-Paket verschobenen Annex-III-Fristen sowie
 * nationale Zusatzmodule (DE, AT, IT, ES, FR, NL). Quelltexte sind
 * lokalisiert (DE/EN) und werden hier je Sprache aufgelöst — vorbereitet
 * für einen späteren signierten Update-Feed.
 *
 * WICHTIG: Inhalte sind eine strukturierte Arbeitshilfe, keine Rechtsberatung.
 */
const VERSION = '2026.07.1';
const RELEASED_AT = '2026-07-04';

const LEGAL_BASIS: LText = {
  de: 'Verordnung (EU) 2024/1689 (AI Act) + nationale Module, Stand Juli 2026',
  en: 'Regulation (EU) 2024/1689 (AI Act) + national modules, as of July 2026',
};

function resolveItem(src: ContentItemSrc, locale: Locale): ContentItem {
  return {
    id: src.id,
    label: resolveText(src.label, locale),
    legalRef: src.legalRef,
    ...(src.hint ? { hint: resolveText(src.hint, locale) } : {}),
  };
}

function resolveObligation(src: ObligationSrc, locale: Locale): Obligation {
  return {
    id: src.id,
    title: resolveText(src.title, locale),
    articles: src.articles,
    description: resolveText(src.description, locale),
    deadline: src.deadline,
    roles: src.roles,
    riskClasses: src.riskClasses,
  };
}

function resolveDeadline(src: DeadlineSrc, locale: Locale): Deadline {
  return {
    id: src.id,
    date: src.date,
    label: resolveText(src.label, locale),
    description: resolveText(src.description, locale),
  };
}

function resolveNational(src: NationalPackSrc, locale: Locale): NationalPack {
  return {
    code: src.code,
    country: resolveText(src.country, locale),
    authority: resolveText(src.authority, locale),
    items: src.items.map((i) => resolveObligation(i, locale)),
  };
}

/**
 * Liefert den Content-Pack in der gewünschten Sprache.
 *
 * @param locale - Zielsprache (de/en)
 * @returns Vollständig aufgelöster Content-Pack
 */
export function getContentPack(locale: Locale): ContentPack {
  return {
    version: VERSION,
    releasedAt: RELEASED_AT,
    legalBasis: resolveText(LEGAL_BASIS, locale),
    aiDefinitionCriteria: AI_DEFINITION_CRITERIA.map((i) => resolveItem(i, locale)),
    prohibitedPractices: PROHIBITED_PRACTICES.map((i) => resolveItem(i, locale)),
    annexIIICategories: ANNEX_III_CATEGORIES.map((i) => resolveItem(i, locale)),
    transparencyTriggers: TRANSPARENCY_TRIGGERS.map((i) => resolveItem(i, locale)),
    obligations: OBLIGATIONS.map((o) => resolveObligation(o, locale)),
    deadlines: DEADLINES.map((d) => resolveDeadline(d, locale)),
    national: NATIONAL_PACKS.map((n) => resolveNational(n, locale)),
  };
}

/** Deutscher Content-Pack (Kompatibilitäts-Export, u. a. für Tests). */
export const CONTENT_PACK: ContentPack = getContentPack('de');
