"use client";

import { useState } from "react";
import { Button } from "@/components/ui/button";

export function AccountActions({ newsletterOptIn }: { newsletterOptIn: boolean }) {
  const [msg, setMsg] = useState("");

  async function post(url: string, body?: unknown) {
    const res = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: body ? JSON.stringify(body) : undefined });
    const data = await res.json();
    setMsg(data.message ?? data.error ?? (data.ok ? "Erledigt." : "Fehler."));
    return data;
  }

  async function logout() {
    await post("/api/auth/logout");
    window.location.href = "/";
  }

  async function deleteAccount() {
    if (!confirm("Account wirklich löschen? Das entfernt Konto, Sessions, Favoriten, Verlauf und Einstellungen.")) return;
    await post("/api/account/delete");
    window.location.href = "/";
  }

  async function cancelSubscription() {
    await post("/api/billing/cancel");
  }

  async function newsletter(enabled: boolean) {
    await post("/api/account/newsletter", { enabled });
  }

  return (
    <div className="space-y-3">
      {msg && <p className="rounded-lg bg-blue-50 p-3 text-sm text-blue-900">{msg}</p>}
      <div className="flex flex-wrap gap-2">
        <Button type="button" onClick={() => newsletter(!newsletterOptIn)} variant="outline">
          {newsletterOptIn ? "Newsletter abmelden" : "Newsletter anmelden"}
        </Button>
        <Button type="button" onClick={cancelSubscription} variant="outline">Abo zum Periodenende kündigen</Button>
        <Button type="button" asChild variant="outline"><a href="/api/account/export">Daten exportieren</a></Button>
        <Button type="button" onClick={logout} variant="outline">Abmelden</Button>
        <Button type="button" onClick={deleteAccount} variant="destructive">Account löschen</Button>
      </div>
    </div>
  );
}
