# ============================================================
# checkpoint.ps1
# ------------------------------------------------------------
# Wird von checkpoint.cmd aufgerufen. Liest
# .checkpoint-pending.txt, haengt einen Eintrag an changelog.md
# an (mit aktuellem Timestamp vom lokalen PC), fuehrt einen
# Git-Commit aus und loescht die Pending-Datei.
# ============================================================

$ErrorActionPreference = 'Stop'

# Repo-Root = Ordner, in dem dieses Skript liegt
$repoRoot = $PSScriptRoot
Set-Location $repoRoot

$pendingFile   = Join-Path $repoRoot '.checkpoint-pending.txt'
$changelogFile = Join-Path $repoRoot 'changelog.md'

# --- Pending-Datei lesen -----------------------------------
if (-not (Test-Path $pendingFile)) {
    Write-Error ".checkpoint-pending.txt nicht gefunden."
    exit 1
}

$lines = Get-Content $pendingFile -Encoding UTF8
if ($lines.Count -lt 2) {
    Write-Error ".checkpoint-pending.txt muss mindestens 2 Zeilen enthalten (Session, Zusammenfassung)."
    exit 1
}

$session = $lines[0].Trim()
$summary = ($lines | Select-Object -Skip 1 | Where-Object { $_.Trim() -ne '' }) -join ' '
$summary = $summary.Trim()

if ([string]::IsNullOrWhiteSpace($session)) {
    Write-Error "Session-Nummer (Zeile 1) ist leer."
    exit 1
}
if ($session -notmatch '^S\d{2,}$') {
    Write-Error "Session-Nummer '$session' hat nicht das Format S<NN> (z.B. S01, S12)."
    exit 1
}
if ([string]::IsNullOrWhiteSpace($summary)) {
    Write-Error "Zusammenfassung (Zeile 2+) ist leer."
    exit 1
}

# --- Timestamp und Eintrag bauen ---------------------------
$timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm'
$entry = "$timestamp | $session | $summary"

Write-Host ""
Write-Host "[checkpoint] Neuer Eintrag:" -ForegroundColor Cyan
Write-Host "  $entry"
Write-Host ""

# --- Eintrag an changelog.md anhaengen ---------------------
# Immer erst sicherstellen, dass die Datei mit einem Zeilenumbruch endet.
$utf8NoBom = New-Object System.Text.UTF8Encoding $false

if (Test-Path $changelogFile) {
    $existing = [System.IO.File]::ReadAllText($changelogFile, $utf8NoBom)
    if ($existing.Length -gt 0 -and -not ($existing.EndsWith("`n"))) {
        [System.IO.File]::AppendAllText($changelogFile, "`r`n", $utf8NoBom)
    }
} else {
    Write-Error "changelog.md nicht gefunden."
    exit 1
}

[System.IO.File]::AppendAllText($changelogFile, $entry + "`r`n", $utf8NoBom)
Write-Host "[checkpoint] An changelog.md angehaengt." -ForegroundColor Green

# --- Git add + commit --------------------------------------
& git add -A
if ($LASTEXITCODE -ne 0) {
    Write-Error "git add fehlgeschlagen (Exit Code $LASTEXITCODE)."
    exit $LASTEXITCODE
}

$commitMsg = "${session}: $summary"
& git commit -m $commitMsg
if ($LASTEXITCODE -ne 0) {
    Write-Error "git commit fehlgeschlagen (Exit Code $LASTEXITCODE)."
    exit $LASTEXITCODE
}

Write-Host "[checkpoint] Commit erstellt: $commitMsg" -ForegroundColor Green

# --- Pending-Datei loeschen --------------------------------
Remove-Item $pendingFile -Force
Write-Host "[checkpoint] .checkpoint-pending.txt entfernt." -ForegroundColor Green
