import { ReactNode } from 'react'
import { Disc, Tv, HardDrive, Bell, Wrench, Cpu, Download, HelpCircle } from 'lucide-react'
import { PageHeader } from '../components/ui/PageHeader'
import { Card, CardHeader, CardTitle, CardContent } from '../components/ui/Card'

function Abschnitt({ icon: Icon, titel, children }: { icon: any, titel: string, children: ReactNode }) {
  return (
    <Card>
      <CardHeader>
        <CardTitle className="flex items-center gap-2.5">
          <Icon size={20} className="text-amber-500" />
          <span>{titel}</span>
        </CardTitle>
      </CardHeader>
      <CardContent className="space-y-3 text-sm leading-relaxed text-slate-600 dark:text-slate-300">
        {children}
      </CardContent>
    </Card>
  )
}

export default function AnleitungPage() {
  const fett = "font-semibold text-slate-100"

  return (
    <div className="space-y-6 max-w-6xl mx-auto">
      <PageHeader
        title="Anleitung & Hilfe"
        subtitle="So funktioniert Rippy — vom Einlegen der Disc bis zum fertigen Film in deinem Media-Server"
      />

      <Abschnitt icon={Disc} titel="Der normale Weg: Disc rein, fertig">
        <p>
          <span className={fett}>1. Disc einlegen.</span> Rippy erkennt sie automatisch (Titel, Poster,
          Beschreibung) und zeigt sie oben im Dashboard. Stimmt der Titel nicht → „Nicht korrekt?"
          klicken und den richtigen wählen — Rippy merkt sich das für diese Disc.
        </p>
        <p>
          <span className={fett}>2. „Rippen starten"</span> und das Ziel wählen: 🎥 Filme, 📺 Serien,
          🎵 Musik oder ein eigener Ordner (auch NAS-Freigaben). Optional: „Nur Hauptfilm" (längster
          Titel) oder per <span className={fett}>„Disc scannen"</span> einzelne Titel an-/abwählen.
        </p>
        <p>
          <span className={fett}>3. Warten.</span> Rippy sichert verlustfrei (MakeMKV) und komprimiert
          danach auf Arbeitsgröße (HandBrake) — alle Tonspuren und Untertitel bleiben erhalten.
          Fertige Jobs haben einen Download-Knopf; Klick auf den Titel zeigt alle Details.
        </p>
        <p>
          <span className={fett}>Vollautomatik:</span> Unter Einstellungen → Ripping einschaltbar —
          dann startet der Rip ohne Nachfrage, sobald eine Disc erkannt wurde. Bereits gerippte
          Discs (Fingerabdruck) werden übersprungen.
        </p>
      </Abschnitt>

      <Abschnitt icon={Tv} titel="Serien rippen">
        <p>
          Im „Rippen starten"-Dialog <span className={fett}>„Serien"</span> wählen, Serienname und
          Staffel angeben. Die Ablage wird automatisch <code>Serie/Season 02/…</code>, und nach dem
          Rip ordnet Rippy die Episoden über einen Laufzeit-Abgleich mit TMDB zu und benennt sie
          („Serie S02E03.mkv"). Das passiert nur bei <span className={fett}>eindeutiger</span> Zuordnung —
          im Zweifel bleiben die Original-Namen und das Log sagt warum.
        </p>
        <p>
          Eine komplette Staffel auf einer Disc klappt auch, wenn alle Episoden gleich lang sind
          (Anime-Boxen). Bei Teil-Discs mit lauter gleich langen Episoden ist eine automatische
          Zuordnung prinzipiell nicht möglich — dann von Hand umbenennen.
        </p>
      </Abschnitt>

      <Abschnitt icon={HardDrive} titel="NAS &amp; Speicherziele">
        <p>
          Einstellungen → Speicherziele: Rechner/NAS eintragen, <span className={fett}>Benutzer +
          Passwort</span> angeben (Windows und die meisten NAS lehnen Gast-Zugriffe ab!), „Freigaben
          auflisten", Freigabe wählen, „Einhängen &amp; speichern". Danach taucht das Ziel im
          „Rippen starten"-Dialog auf und wird beim Start automatisch wieder verbunden.
        </p>
        <p>
          <span className={fett}>4K-UHD-Tipp:</span> Rohdaten sind bis 100 GB groß. Wenn die
          Rippy-Platte knapp ist (Dashboard zeigt den freien Platz), das Arbeitsverzeichnis unter
          Einstellungen → Verarbeitung auf eine große Freigabe legen. Rippy prüft den Platz vor
          jedem Rip und bricht sonst mit Klartext ab.
        </p>
      </Abschnitt>

      <Abschnitt icon={Tv} titel="Jellyfin, Emby, Kodi, Plex">
        <p>
          Einstellungen → Ripping → Media-Server: Rippy benennt fertige Rips als „Titel (Jahr)" und
          legt für Jellyfin/Emby/Kodi zusätzlich <code>movie.nfo</code> + <code>poster.jpg</code> dazu —
          dein Server erkennt alles ohne Nacharbeit (Plex nutzt nur die Benennung).
        </p>
        <p>
          <span className={fett}>Null-Klick-Kette:</span> Bei Jellyfin/Emby zusätzlich Server-URL und
          API-Key eintragen (Administration → API-Schlüssel) — dann stößt Rippy nach jedem fertigen
          Rip sofort einen Bibliotheks-Scan an. Disc rein → Film erscheint im Server.
        </p>
      </Abschnitt>

      <Abschnitt icon={Bell} titel="Benachrichtigungen">
        <p>
          Einstellungen → Benachrichtigungen: eine Webhook-URL eintragen (Discord-Webhook, ntfy-Thema
          für Handy-Push, Slack oder eigenes JSON), „Test senden", speichern. Rippy meldet sich, wenn
          ein Job fertig ist, fehlschlägt oder abgebrochen wird. Die Schritt-für-Schritt-Anleitung je
          Dienst steht direkt auf der Einstellungs-Seite.
        </p>
      </Abschnitt>

      <Abschnitt icon={Cpu} titel="Weitere Maschinen als Encoding-Worker">
        <p>
          Die Kompression kann jede Maschine im Netz übernehmen — Einstellungen → Worker.
          Für <span className={fett}>Windows</span> gibt es einen <span className={fett}>Installer
          (.exe)</span>: herunterladen, doppelklicken, im Fenster Adresse + Name eintragen,
          „Installieren" — kein Konsolenfenster, kein CLI (nur Python 3.10+ muss auf dem PC sein).
          Für <span className={fett}>Linux</span> gibt es einen Docker-Befehl. Die Maschine taucht
          danach unter ihrem Namen in der Worker-Liste auf und zieht sich Kompressions-Jobs
          automatisch. Gerippt wird immer auf der Rippy-Hauptmaschine.
        </p>
        <p>
          Der Windows-Worker läuft mit <span className={fett}>Tray-Symbol</span> neben der Uhr
          (Status, Start/Stopp, „Rippy öffnen", Log) — gestartet über <code>start-tray.bat</code>.
          Deinstallieren: <code>uninstall.ps1</code> im Worker-Ordner stoppt alles, entfernt den
          Autostart, meldet den Worker in Rippy ab und löscht den Ordner rückstandsfrei.
        </p>
        <p>
          <span className={fett}>Wichtig:</span> Worker verbinden sich direkt im Heimnetz — in den
          Befehlen immer die <span className={fett}>LAN-Adresse</span> der Rippy-Maschine verwenden,
          nie eine externe Domain (die läuft über den Reverse-Proxy und blockt).
        </p>
      </Abschnitt>

      <Abschnitt icon={Wrench} titel="MakeMKV-Beta-Key &amp; System">
        <p>
          Blu-ray-Ripping braucht den MakeMKV-Beta-Key, der etwa <span className={fett}>monatlich
          wechselt</span> (MakeMKV-Forum, Thread „MakeMKV is free while in beta"). Neuen Key unter
          Einstellungen → System eintragen — gilt ab dem nächsten Rip, ohne Neustart. DVDs gehen
          immer auch ohne Key. Dort stehen auch die Werkzeug-Versionen und der freie Speicherplatz.
        </p>
        <p>
          <span className={fett}>Updates:</span> „Auf Updates prüfen" (ebenfalls Einstellungen →
          System) vergleicht die installierten Versionen mit makemkv.com und den offiziellen
          HandBrake-Releases. Gibt es ein MakeMKV-Update, zeigt Rippy den fertigen
          Update-Befehl an — wichtig, weil neue Versionen auch die neueste
          Disc-Schlüssel-Datenbank mitbringen.
        </p>
      </Abschnitt>

      <Abschnitt icon={Download} titel="Fertige Dateien herunterladen">
        <p>
          Bei fertigen Jobs: „Download" in der Aktion-Spalte (oder Klick auf den Titel) → Dateiliste
          mit „Alle herunterladen". Die Job-Liste lässt sich per Papierkorb bzw. „Erledigte aufräumen"
          leeren — <span className={fett}>die gerippten Dateien bleiben dabei immer liegen</span>.
          „CSV" exportiert die komplette Historie für Excel.
        </p>
      </Abschnitt>

      <Abschnitt icon={HelpCircle} titel="Häufige Fragen">
        <p>
          <span className={fett}>„Diese Disc wurde bereits gerippt"?</span> Rippy erkennt Discs am
          Fingerabdruck. Nochmal rippen geht trotzdem — der Hinweis verhindert nur Versehen.
        </p>
        <p>
          <span className={fett}>4K-UHD schlägt fehl mit „volume key is unknown"?</span> Das Laufwerk
          liest die Disc (LibreDrive), aber MakeMKV kennt den Schlüssel dieser (zu neuen) Pressung
          noch nicht. Den automatisch gespeicherten AACS-Dump im MakeMKV-Forum einreichen — mit einem
          der nächsten Updates ist die Disc rippbar.
        </p>
        <p>
          <span className={fett}>„Neu komprimieren" fehlt bei einem Fehl-Job?</span> Der Knopf
          erscheint nur, wenn die Rohdaten noch daliegen — bei einem Job, der nie gerippt hat, gäbe
          es nichts zu komprimieren.
        </p>
        <p>
          <span className={fett}>Kein Laufwerk sichtbar?</span> In einer VM muss das Laufwerk per
          USB-Passthrough durchgereicht sein (nicht als emuliertes CD-ROM) — Details in der README.
        </p>
      </Abschnitt>
    </div>
  )
}
