"use client";

import { useSession } from "next-auth/react";
import { useRouter } from "next/navigation";
import { useEffect, useState } from "react";
import { useConfirm } from "@/components/shared/use-confirm";

interface FeaturedPackage {
  id: number;
  name: string;
  type: string;
  price_credits: number;
  duration_hours: number;
  is_active: boolean;
}

export default function BoostPage() {
  const { data: session, status } = useSession();
  const router = useRouter();
  const [packages, setPackages] = useState<FeaturedPackage[]>([]);
  const [loading, setLoading] = useState(true);
  const [purchasing, setPurchasing] = useState<number | null>(null);
  const { confirm: askConfirm, dialog: confirmDialog } = useConfirm();

  useEffect(() => {
    if (status === "unauthenticated") {
      router.push("/login");
      return;
    }
    async function fetchPackages() {
      try {
        const res = await fetch("/api/admin/boosts");
        if (res.ok) {
          const data = await res.json();
          setPackages(
            (data.packages || []).filter((p: FeaturedPackage) => p.is_active)
          );
        }
      } catch {
        // silently fail
      } finally {
        setLoading(false);
      }
    }
    if (status === "authenticated") {
      fetchPackages();
    }
  }, [status, router]);

  async function handlePurchase(pkg: FeaturedPackage) {
    if (!(await askConfirm({ title: "Buy boost", message: `Buy "${pkg.name}" for ${pkg.price_credits} credits?` }))) return;
    setPurchasing(pkg.id);
    try {
      const res = await fetch("/api/credits/purchase-boost", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ package_id: pkg.id }),
      });
      if (!res.ok) {
        const data = await res.json().catch(() => ({}));
        alert(data.error || "Failed to purchase boost");
      } else {
        alert("Boost purchased successfully!");
        router.refresh();
      }
    } catch {
      alert("Failed to purchase boost");
    } finally {
      setPurchasing(null);
    }
  }

  if (loading || status === "loading") {
    return (
      <div className="flex items-center justify-center min-h-[400px]">
        <p className="text-text-muted">Loading...</p>
      </div>
    );
  }

  return (
    <div className="max-w-4xl mx-auto space-y-6">
      {confirmDialog}
      <h1 className="text-2xl font-bold">Featured Boost Packages</h1>
      <p className="text-text-muted">
        Get more visibility by featuring your profile. Purchase a boost package
        using your credits.
      </p>

      {packages.length === 0 ? (
        <div className="bg-surface rounded-lg p-8 text-center">
          <p className="text-text-muted">
            No boost packages are currently available.
          </p>
        </div>
      ) : (
        <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
          {packages.map((pkg) => (
            <div
              key={pkg.id}
              className="bg-surface rounded-lg p-6 border border-surface-light hover:border-primary/50 transition-colors"
            >
              <div className="mb-4">
                <span className="inline-block px-2 py-0.5 rounded text-xs font-medium bg-purple-500/20 text-purple-400 mb-2">
                  {pkg.type}
                </span>
                <h3 className="text-lg font-semibold">{pkg.name}</h3>
              </div>
              <div className="space-y-2 mb-6">
                <div className="flex justify-between text-sm">
                  <span className="text-text-muted">Price</span>
                  <span className="font-medium text-primary">
                    {pkg.price_credits} credits
                  </span>
                </div>
                <div className="flex justify-between text-sm">
                  <span className="text-text-muted">Duration</span>
                  <span>
                    {pkg.duration_hours >= 24
                      ? `${Math.floor(pkg.duration_hours / 24)} day${
                          Math.floor(pkg.duration_hours / 24) > 1 ? "s" : ""
                        }`
                      : `${pkg.duration_hours} hour${
                          pkg.duration_hours > 1 ? "s" : ""
                        }`}
                  </span>
                </div>
              </div>
              <button
                disabled={purchasing !== null}
                onClick={() => handlePurchase(pkg)}
                className="w-full bg-primary hover:bg-primary-dark text-white py-2 rounded-lg transition-colors text-sm disabled:opacity-50"
              >
                {purchasing === pkg.id ? "Purchasing..." : "Buy Now"}
              </button>
            </div>
          ))}
        </div>
      )}
    </div>
  );
}
