/**
 * Bildungsstufen-Konfiguration
 *
 * Abstrahiert von länderspezifischen Bezeichnungen.
 * Pro App-Instanz wird ein Land/Region konfiguriert,
 * das die Zuordnung von internen Leveln zu lokalen Bezeichnungen steuert.
 *
 * Intern arbeiten wir mit:
 * - `educationLevel`: 1–13 (= Schulstufe/Schuljahr, international vergleichbar)
 * - `ageRange`: Alter der Zielgruppe
 * - `readingLevel`: Lesekompetenz (none, basic, fluent)
 *
 * In der Entwicklung entscheiden wir pro Simulation:
 * - Welche educationLevels werden unterstützt?
 * - Braucht es eine Variante ohne Lesen (Grundstufe 1)?
 * - Welche Sprachkomplexität ist angemessen?
 */

export type ReadingLevel = 'none' | 'basic' | 'fluent'

export interface EducationLevel {
  /** Internationale Schulstufe (1 = 1. Schuljahr, 5 = 5. Schuljahr etc.) */
  level: number
  /** Typisches Alter */
  ageMin: number
  ageMax: number
  /** Erwartete Lesekompetenz */
  reading: ReadingLevel
  /** Kann komplexe Texte verarbeiten? */
  canProcessComplexText: boolean
}

export interface CountryConfig {
  id: string
  name: string
  /** Zuordnung: lokale Bezeichnung → internationale Schulstufe */
  stages: CountryStage[]
  /** Welche Schulstufen deckt unser Produkt primär ab? */
  primaryRange: { from: number; to: number }
  /** Optionale Erweiterung (z.B. Volksschule) */
  extendedRange?: { from: number; to: number }
}

export interface CountryStage {
  /** Internationale Schulstufe */
  level: number
  /** Lokale Bezeichnung (z.B. "1. Klasse Mittelschule") */
  localName: string
  /** Kurzform (z.B. "1. Kl. MS") */
  shortName: string
  /** Schultyp-Bezeichnung */
  schoolType: string
  /** Fachbezeichnung für Geografie in dieser Stufe */
  subjectName: string
  /** Wochenstunden GW (falls bekannt) */
  hoursPerWeek?: number
}

// ============================================================
// Länderkonfigurationen
// ============================================================

export const AUSTRIA: CountryConfig = {
  id: 'at',
  name: 'Österreich',
  primaryRange: { from: 5, to: 8 },        // Mittelschule / AHS-Unterstufe
  extendedRange: { from: 1, to: 4 },       // Volksschule (Sachunterricht)
  stages: [
    // Volksschule (optional, für spätere Erweiterung)
    { level: 1, localName: '1. Klasse Volksschule', shortName: '1. VS', schoolType: 'Volksschule', subjectName: 'Sachunterricht', hoursPerWeek: undefined },
    { level: 2, localName: '2. Klasse Volksschule', shortName: '2. VS', schoolType: 'Volksschule', subjectName: 'Sachunterricht', hoursPerWeek: undefined },
    { level: 3, localName: '3. Klasse Volksschule', shortName: '3. VS', schoolType: 'Volksschule', subjectName: 'Sachunterricht', hoursPerWeek: undefined },
    { level: 4, localName: '4. Klasse Volksschule', shortName: '4. VS', schoolType: 'Volksschule', subjectName: 'Sachunterricht', hoursPerWeek: undefined },
    // Mittelschule / AHS-Unterstufe (= unser Hauptfokus)
    { level: 5, localName: '1. Klasse', shortName: '1. Kl.', schoolType: 'Mittelschule / AHS-Unterstufe', subjectName: 'Geografie und wirtschaftliche Bildung', hoursPerWeek: 2 },
    { level: 6, localName: '2. Klasse', shortName: '2. Kl.', schoolType: 'Mittelschule / AHS-Unterstufe', subjectName: 'Geografie und wirtschaftliche Bildung', hoursPerWeek: 1 },
    { level: 7, localName: '3. Klasse', shortName: '3. Kl.', schoolType: 'Mittelschule / AHS-Unterstufe', subjectName: 'Geografie und wirtschaftliche Bildung', hoursPerWeek: 2 },
    { level: 8, localName: '4. Klasse', shortName: '4. Kl.', schoolType: 'Mittelschule / AHS-Unterstufe', subjectName: 'Geografie und wirtschaftliche Bildung', hoursPerWeek: 2 },
  ],
}

export const GERMANY_BAYERN: CountryConfig = {
  id: 'de-by',
  name: 'Deutschland (Bayern)',
  primaryRange: { from: 5, to: 10 },
  stages: [
    { level: 5,  localName: '5. Jahrgangsstufe', shortName: '5. Jgst.', schoolType: 'Gymnasium / Realschule', subjectName: 'Geographie', hoursPerWeek: 2 },
    { level: 6,  localName: '6. Jahrgangsstufe', shortName: '6. Jgst.', schoolType: 'Gymnasium / Realschule', subjectName: 'Geographie', hoursPerWeek: 0 },
    { level: 7,  localName: '7. Jahrgangsstufe', shortName: '7. Jgst.', schoolType: 'Gymnasium / Realschule', subjectName: 'Geographie', hoursPerWeek: 2 },
    { level: 8,  localName: '8. Jahrgangsstufe', shortName: '8. Jgst.', schoolType: 'Gymnasium / Realschule', subjectName: 'Geographie', hoursPerWeek: 2 },
    { level: 9,  localName: '9. Jahrgangsstufe', shortName: '9. Jgst.', schoolType: 'Gymnasium / Realschule', subjectName: 'Geographie', hoursPerWeek: 0 },
    { level: 10, localName: '10. Jahrgangsstufe', shortName: '10. Jgst.', schoolType: 'Gymnasium / Realschule', subjectName: 'Geographie', hoursPerWeek: 2 },
  ],
}

export const GERMANY_NRW: CountryConfig = {
  id: 'de-nrw',
  name: 'Deutschland (NRW)',
  primaryRange: { from: 5, to: 10 },
  stages: [
    { level: 5,  localName: 'Klasse 5', shortName: 'Kl. 5', schoolType: 'Gymnasium / Gesamtschule', subjectName: 'Erdkunde', hoursPerWeek: 2 },
    { level: 6,  localName: 'Klasse 6', shortName: 'Kl. 6', schoolType: 'Gymnasium / Gesamtschule', subjectName: 'Erdkunde', hoursPerWeek: 2 },
    { level: 7,  localName: 'Klasse 7', shortName: 'Kl. 7', schoolType: 'Gymnasium / Gesamtschule', subjectName: 'Erdkunde', hoursPerWeek: 2 },
    { level: 8,  localName: 'Klasse 8', shortName: 'Kl. 8', schoolType: 'Gymnasium / Gesamtschule', subjectName: 'Erdkunde', hoursPerWeek: 1 },
    { level: 9,  localName: 'Klasse 9', shortName: 'Kl. 9', schoolType: 'Gymnasium / Gesamtschule', subjectName: 'Erdkunde', hoursPerWeek: 2 },
    { level: 10, localName: 'Klasse 10', shortName: 'Kl. 10', schoolType: 'Gymnasium / Gesamtschule', subjectName: 'Erdkunde', hoursPerWeek: 1 },
  ],
}

export const SWITZERLAND: CountryConfig = {
  id: 'ch',
  name: 'Schweiz',
  primaryRange: { from: 7, to: 9 },       // Zyklus 3
  extendedRange: { from: 3, to: 6 },      // Zyklus 2 (NMG)
  stages: [
    // Zyklus 2 (optional)
    { level: 3, localName: '3. Klasse', shortName: '3. Kl.', schoolType: 'Primarstufe', subjectName: 'Natur, Mensch, Gesellschaft', hoursPerWeek: undefined },
    { level: 4, localName: '4. Klasse', shortName: '4. Kl.', schoolType: 'Primarstufe', subjectName: 'Natur, Mensch, Gesellschaft', hoursPerWeek: undefined },
    { level: 5, localName: '5. Klasse', shortName: '5. Kl.', schoolType: 'Primarstufe', subjectName: 'Natur, Mensch, Gesellschaft', hoursPerWeek: undefined },
    { level: 6, localName: '6. Klasse', shortName: '6. Kl.', schoolType: 'Primarstufe', subjectName: 'Natur, Mensch, Gesellschaft', hoursPerWeek: undefined },
    // Zyklus 3 (= unser Hauptfokus)
    { level: 7, localName: '1. Oberstufe', shortName: '1. OS', schoolType: 'Sekundarschule', subjectName: 'Räume, Zeiten, Gesellschaften', hoursPerWeek: 2 },
    { level: 8, localName: '2. Oberstufe', shortName: '2. OS', schoolType: 'Sekundarschule', subjectName: 'Räume, Zeiten, Gesellschaften', hoursPerWeek: 2 },
    { level: 9, localName: '3. Oberstufe', shortName: '3. OS', schoolType: 'Sekundarschule', subjectName: 'Räume, Zeiten, Gesellschaften', hoursPerWeek: 2 },
  ],
}

// ============================================================
// Education-Level-Definitionen (länderunabhängig)
// ============================================================

export const EDUCATION_LEVELS: EducationLevel[] = [
  { level: 1,  ageMin: 6,  ageMax: 7,  reading: 'none',   canProcessComplexText: false },
  { level: 2,  ageMin: 7,  ageMax: 8,  reading: 'basic',  canProcessComplexText: false },
  { level: 3,  ageMin: 8,  ageMax: 9,  reading: 'basic',  canProcessComplexText: false },
  { level: 4,  ageMin: 9,  ageMax: 10, reading: 'fluent', canProcessComplexText: false },
  { level: 5,  ageMin: 10, ageMax: 11, reading: 'fluent', canProcessComplexText: false },
  { level: 6,  ageMin: 11, ageMax: 12, reading: 'fluent', canProcessComplexText: true },
  { level: 7,  ageMin: 12, ageMax: 13, reading: 'fluent', canProcessComplexText: true },
  { level: 8,  ageMin: 13, ageMax: 14, reading: 'fluent', canProcessComplexText: true },
  { level: 9,  ageMin: 14, ageMax: 15, reading: 'fluent', canProcessComplexText: true },
  { level: 10, ageMin: 15, ageMax: 16, reading: 'fluent', canProcessComplexText: true },
]

// ============================================================
// Alle verfügbaren Länder
// ============================================================

export const ALL_COUNTRIES: CountryConfig[] = [
  AUSTRIA,
  GERMANY_BAYERN,
  GERMANY_NRW,
  SWITZERLAND,
]

// ============================================================
// Helper-Funktionen
// ============================================================

/** Gibt die lokale Bezeichnung für eine Schulstufe zurück */
export function getLocalName(country: CountryConfig, level: number): string | undefined {
  return country.stages.find(s => s.level === level)?.localName
}

/** Gibt alle Stufen zurück, die im Hauptfokus des Landes liegen */
export function getPrimaryStages(country: CountryConfig): CountryStage[] {
  return country.stages.filter(
    s => s.level >= country.primaryRange.from && s.level <= country.primaryRange.to
  )
}

/** Prüft, ob eine Schulstufe Lesekompetenz erfordert */
export function requiresReading(level: number): boolean {
  const ed = EDUCATION_LEVELS.find(e => e.level === level)
  return ed ? ed.reading !== 'none' : true
}

/** Gibt die Lesekompetenz für eine Stufe zurück */
export function getReadingLevel(level: number): ReadingLevel {
  return EDUCATION_LEVELS.find(e => e.level === level)?.reading ?? 'fluent'
}

/** Gibt die Fachbezeichnung für eine Stufe in einem Land zurück */
export function getSubjectName(country: CountryConfig, level: number): string | undefined {
  return country.stages.find(s => s.level === level)?.subjectName
}
