'use client'

// Loop 12 PR 2: PPTX-Download der kanonischen Präsentations-Folien — eine
// reine Wiedergabe-Kette: kanonisches Dokument (Server-Action) →
// presentation_package.slides → Adapter → bestehender PPTX-Renderer.
// Nichts wird hier berechnet; jede Zahl stammt wörtlich aus dem Export.

import { useState, useTransition } from 'react'
import { exportQafCanonicalJson } from '@/app/qaf-differences/canonical-source-actions'
import { presentationPackageToExportConfig } from '@/lib/export/qaf-presentation-adapter'
import { exportToPptx } from '@/lib/export/export-service'

interface Props {
  comparisonId: string
  partLabelDe: string
}

export function QafV2PptxExport({ comparisonId, partLabelDe }: Props) {
  const [fehlerDe, setFehlerDe] = useState<string | null>(null)
  const [pending, startTransition] = useTransition()

  const herunterladen = () => {
    setFehlerDe(null)
    startTransition(async () => {
      try {
        const res = await exportQafCanonicalJson(comparisonId)
        if (!res.ok) {
          setFehlerDe(res.error)
          return
        }
        const doc = JSON.parse(res.data.json) as {
          analysis_areas?: { presentation_package?: { state?: string; content?: { slides?: unknown[] } | null } }
        }
        const slides = doc.analysis_areas?.presentation_package?.content?.slides
        if (!Array.isArray(slides) || slides.length === 0) {
          setFehlerDe('Das kanonische Dokument führt kein Präsentations-Paket — PPTX nicht möglich.')
          return
        }
        const cfg = presentationPackageToExportConfig(
          slides as Parameters<typeof presentationPackageToExportConfig>[0],
          {
            titleDe: `QAF-Vergleich ${partLabelDe}`,
            subtitleDe: 'Aus dem kanonischen Export — jede Zahl referenziert eine Kennung.',
            fileName: res.data.fileName.replace(/\.json$/, '.pptx'),
          },
        )
        const blob = await exportToPptx(cfg)
        const url = URL.createObjectURL(blob)
        const a = document.createElement('a')
        a.href = url
        a.download = cfg.fileName
        document.body.appendChild(a)
        a.click()
        a.remove()
        setTimeout(() => URL.revokeObjectURL(url), 0)
      } catch (err) {
        // Client-seitige Fehler (Parse, Adapter, pptxgenjs) landen NIE im
        // Server-Log — die Details gehören in die sichtbare Meldung, sonst
        // wäre der reale Fehler verschluckt (Review-Befund; no-console-Regel
        // des Repos, daher UI statt Konsole).
        const detail = err instanceof Error ? err.message : String(err)
        setFehlerDe(`PPTX-Export fehlgeschlagen: ${detail}`)
      }
    })
  }

  return (
    <span className="inline-flex items-center gap-2">
      <button
        type="button"
        onClick={herunterladen}
        disabled={pending}
        className="rounded-[2px] border border-border px-3 py-1 text-sm hover:bg-muted disabled:opacity-50"
      >
        {pending ? 'Erzeuge…' : 'Präsentation (PPTX)'}
      </button>
      {fehlerDe === null ? null : <span className="text-xs text-destructive">{fehlerDe}</span>}
    </span>
  )
}
