import { describe, it, expect } from 'vitest'
import { isoWeek, currentIsoWeek, lastIsoWeekOfYear } from '../iso-week'

describe('isoWeek (ISO-8601, Thursday rule)', () => {
  it('berechnet bekannte KWs korrekt', () => {
    // 2026-01-01 ist ein Donnerstag → KW1
    expect(isoWeek(new Date(Date.UTC(2026, 0, 1)))).toBe(1)
    // 2025-12-29 (Montag) gehört zur KW1/2026
    expect(isoWeek(new Date(Date.UTC(2025, 11, 29)))).toBe(1)
    // Jahresmitte
    expect(isoWeek(new Date(Date.UTC(2026, 5, 8)))).toBe(24)
    // Jahresende 2024: 2024-12-30 (Montag) → KW1/2025
    expect(isoWeek(new Date(Date.UTC(2024, 11, 30)))).toBe(1)
  })

  it('liegt immer in 1..53', () => {
    for (let m = 0; m < 12; m++) {
      const w = isoWeek(new Date(Date.UTC(2026, m, 15)))
      expect(w).toBeGreaterThanOrEqual(1)
      expect(w).toBeLessThanOrEqual(53)
    }
  })

  it('currentIsoWeek delegiert an isoWeek(now)', () => {
    expect(currentIsoWeek()).toBe(isoWeek(new Date()))
  })

  it('lastIsoWeekOfYear kennt 52- und 53-Wochen-Jahre (KAR-836)', () => {
    // 53 Wochen: Jahr beginnt Donnerstag (2026) bzw. Schaltjahr ab Mittwoch (2020)
    expect(lastIsoWeekOfYear(2026)).toBe(53)
    expect(lastIsoWeekOfYear(2020)).toBe(53)
    // 52 Wochen: der Normalfall (~83% der Jahre)
    expect(lastIsoWeekOfYear(2025)).toBe(52)
    expect(lastIsoWeekOfYear(2024)).toBe(52)
    expect(lastIsoWeekOfYear(2023)).toBe(52)
  })
})
