"use client";

import { useState, useTransition } from "react";
import { useRouter } from "next/navigation";
import { sendContractReminderAction } from "@/lib/actions/admin";

const REMINDER_COOLDOWN_HOURS = 48;

// Eigenständige Variante von ReminderControl in AdminContractPanel.tsx - dort
// lebt der pending/Ergebnis-State im umgebenden Panel (ein Vertrag pro
// Seite), hier verwaltet jede Zeile der Vertragsübersicht ihren eigenen
// State unabhängig, da mehrere Verträge gleichzeitig auf der Seite stehen.
export function ContractReminderButton({ contractId, lastReminderAt }: { contractId: string; lastReminderAt: string | null }) {
  const router = useRouter();
  const [pending, startTransition] = useTransition();
  const [result, setResult] = useState<{ error?: string; success?: boolean } | null>(null);
  // Lazy useState-Initializer statt eines direkten Date.now()-Aufrufs im
  // Render-Body - läuft nur einmal beim Mount. Nach erfolgreichem Senden
  // liefert router.refresh() ohnehin ein frisches lastReminderAt von oben,
  // ein optimistisches "jetzt + 48h" hier wäre nur redundant.
  const [now] = useState(() => Date.now());

  const nextPossibleAt = lastReminderAt ? new Date(lastReminderAt).getTime() + REMINDER_COOLDOWN_HOURS * 60 * 60 * 1000 : 0;
  const onCooldown = nextPossibleAt > now;

  if (onCooldown) {
    return (
      <span className="text-[var(--rk-ink-muted)]" title="Kein versehentliches Zuspammen">
        Nächste Erinnerung ab{" "}
        {new Date(nextPossibleAt).toLocaleString("de-DE", { day: "2-digit", month: "2-digit", hour: "2-digit", minute: "2-digit" })}
      </span>
    );
  }

  return (
    <div className="flex flex-col gap-1 items-start">
      <button
        disabled={pending}
        onClick={() =>
          startTransition(async () => {
            const res = await sendContractReminderAction(contractId);
            setResult(res);
            if (res.success) router.refresh();
          })
        }
        className="border border-white/30 rounded-lg px-3 py-1.5 text-xs hover:border-white disabled:opacity-50"
      >
        {lastReminderAt ? "Erneut erinnern" : "Erinnerung senden"}
      </button>
      {result?.error && <p className="text-xs text-red-400">{result.error}</p>}
    </div>
  );
}
