'use client'

// Loop 5 Teil 2 (SRC-001): „Neu einlesen" — der Stand wird aus der
// aufbewahrten Originaldatei mit dem AKTUELLEN Parser neu erzeugt
// (frische Zell-Provenienz → mehr kanonische Facts). Zweistufig bestätigt,
// weil der Klick die abgeleiteten Vergleichszeilen ersetzt; die
// Originaldatei selbst bleibt in jedem Ausgang unangetastet.

import { useState, useTransition } from 'react'
import { useRouter } from 'next/navigation'
import { reparseComparisonFile } from '@/app/qaf-differences/file-replace-actions'

interface Props {
  comparisonId: string
  role: 'alt' | 'neu'
}

export function QafV2Reparse({ comparisonId, role }: Props) {
  const [fehlerDe, setFehlerDe] = useState<string | null>(null)
  const [bestaetigen, setBestaetigen] = useState(false)
  const [pending, startTransition] = useTransition()
  const router = useRouter()

  const ausfuehren = () => {
    setFehlerDe(null)
    startTransition(async () => {
      try {
        const res = await reparseComparisonFile(comparisonId, role)
        if (!res.ok) {
          setFehlerDe(res.error)
          return
        }
        // Server-Daten haben sich real geändert (neuer Parse-Stand) —
        // legitime Revalidierung, kein State-Ersatz.
        router.refresh()
      } catch (e) {
        // Transportfehler der Server-Action landen sonst als Full-Page-Error
        // (keine error.tsx-Boundary unter qaf-differences) — Muster
        // qaf-replace-file-button.tsx.
        setFehlerDe(e instanceof Error ? e.message : 'Neu einlesen fehlgeschlagen.')
      } finally {
        setBestaetigen(false)
      }
    })
  }

  return (
    <span className="inline-flex items-center gap-2">
      {bestaetigen ? (
        <>
          <button
            type="button"
            onClick={ausfuehren}
            disabled={pending}
            className="text-xs text-destructive underline-offset-2 hover:underline disabled:opacity-50"
          >
            {pending ? 'Lese neu ein…' : 'Wirklich neu einlesen?'}
          </button>
          {pending ? null : (
            <button
              type="button"
              onClick={() => setBestaetigen(false)}
              className="text-xs text-muted-foreground underline-offset-2 hover:underline"
            >
              Abbrechen
            </button>
          )}
        </>
      ) : (
        <button
          type="button"
          onClick={() => setBestaetigen(true)}
          className="text-xs text-primary underline-offset-2 hover:underline"
        >
          Neu einlesen (aktueller Parser)
        </button>
      )}
      {fehlerDe === null ? null : <span className="text-xs text-destructive">{fehlerDe}</span>}
    </span>
  )
}
