import { describe, it, expect } from 'vitest'
import {
  AUSTRIA, GERMANY_BAYERN, SWITZERLAND,
  getLocalName, getPrimaryStages, requiresReading,
  getReadingLevel, getSubjectName
} from '../../src/core/education-levels'

describe('Education Levels — Österreich', () => {

  it('AT: 1. Klasse MS = Schulstufe 5', () => {
    expect(getLocalName(AUSTRIA, 5)).toBe('1. Klasse')
  })

  it('AT: 4. Klasse MS = Schulstufe 8', () => {
    expect(getLocalName(AUSTRIA, 8)).toBe('4. Klasse')
  })

  it('AT: Volksschule = Schulstufe 1–4', () => {
    expect(getLocalName(AUSTRIA, 1)).toBe('1. Klasse Volksschule')
    expect(getLocalName(AUSTRIA, 4)).toBe('4. Klasse Volksschule')
  })

  it('AT: Hauptfokus = Stufe 5–8 (4 Stufen)', () => {
    const primary = getPrimaryStages(AUSTRIA)
    expect(primary).toHaveLength(4)
    expect(primary[0].level).toBe(5)
    expect(primary[3].level).toBe(8)
  })

  it('AT: Fach heißt "Geografie und wirtschaftliche Bildung" ab Stufe 5', () => {
    expect(getSubjectName(AUSTRIA, 5)).toBe('Geografie und wirtschaftliche Bildung')
  })

  it('AT: Fach heißt "Sachunterricht" in der Volksschule', () => {
    expect(getSubjectName(AUSTRIA, 3)).toBe('Sachunterricht')
  })

  it('AT: Stundentafel korrekt (2-1-2-2)', () => {
    const primary = getPrimaryStages(AUSTRIA)
    expect(primary.map(s => s.hoursPerWeek)).toEqual([2, 1, 2, 2])
  })
})

describe('Education Levels — Deutschland Bayern', () => {

  it('DE-BY: Stufe 5 = "5. Jahrgangsstufe"', () => {
    expect(getLocalName(GERMANY_BAYERN, 5)).toBe('5. Jahrgangsstufe')
  })

  it('DE-BY: Kein Geo in Stufe 6 und 9 (0 Stunden)', () => {
    const stages = getPrimaryStages(GERMANY_BAYERN)
    const stage6 = stages.find(s => s.level === 6)
    const stage9 = stages.find(s => s.level === 9)
    expect(stage6?.hoursPerWeek).toBe(0)
    expect(stage9?.hoursPerWeek).toBe(0)
  })

  it('DE-BY: Fach heißt "Geographie"', () => {
    expect(getSubjectName(GERMANY_BAYERN, 7)).toBe('Geographie')
  })
})

describe('Education Levels — Schweiz', () => {

  it('CH: Stufe 7 = "1. Oberstufe"', () => {
    expect(getLocalName(SWITZERLAND, 7)).toBe('1. Oberstufe')
  })

  it('CH: Hauptfokus = Stufe 7–9 (Zyklus 3)', () => {
    const primary = getPrimaryStages(SWITZERLAND)
    expect(primary).toHaveLength(3)
    expect(primary[0].level).toBe(7)
  })

  it('CH: Fach heißt "Räume, Zeiten, Gesellschaften" in Zyklus 3', () => {
    expect(getSubjectName(SWITZERLAND, 8)).toBe('Räume, Zeiten, Gesellschaften')
  })

  it('CH: Fach heißt "Natur, Mensch, Gesellschaft" in Zyklus 2', () => {
    expect(getSubjectName(SWITZERLAND, 5)).toBe('Natur, Mensch, Gesellschaft')
  })
})

describe('Education Levels — Lesekompetenz', () => {

  it('Stufe 1 (6-jährige): keine Lesekompetenz', () => {
    expect(getReadingLevel(1)).toBe('none')
    expect(requiresReading(1)).toBe(false)
  })

  it('Stufe 2–3 (7-9 Jahre): basale Lesekompetenz', () => {
    expect(getReadingLevel(2)).toBe('basic')
    expect(getReadingLevel(3)).toBe('basic')
  })

  it('Stufe 4+ (ab 9 Jahre): fließende Lesekompetenz', () => {
    expect(getReadingLevel(4)).toBe('fluent')
    expect(getReadingLevel(7)).toBe('fluent')
  })
})
