"use client";

import { useEffect, useState } from "react";
import { useRouter } from "next/navigation";
import { adminRequest, getAdminToken } from "@/lib/admin-api";

type AdminGuardProps = {
  children: React.ReactNode;
};

export function AdminGuard({ children }: AdminGuardProps) {
  const router = useRouter();
  const [isAllowed, setIsAllowed] = useState(false);
  const [isChecking, setIsChecking] = useState(true);

  useEffect(() => {
    async function checkSession() {
      const token = getAdminToken();

      if (!token) {
        setIsAllowed(false);
        setIsChecking(false);
        router.replace("/admin/login");
        return;
      }

      try {
        await adminRequest("/api/admin/me");
        setIsAllowed(true);
      } catch {
        router.replace("/admin/login?reason=session-expired");
      } finally {
        setIsChecking(false);
      }
    }

    checkSession();

    function recheckRestoredPage() {
      if (!getAdminToken()) {
        setIsAllowed(false);
        router.replace("/admin/login");
      }
    }

    window.addEventListener("pageshow", recheckRestoredPage);
    window.addEventListener("focus", recheckRestoredPage);

    return () => {
      window.removeEventListener("pageshow", recheckRestoredPage);
      window.removeEventListener("focus", recheckRestoredPage);
    };
  }, [router]);

  if (isChecking) {
    return (
      <div className="min-h-[60vh] bg-slate-50 px-4 py-24 text-center font-['Space_Grotesk'] text-sm font-bold text-muted-foreground">
        Checking admin session...
      </div>
    );
  }

  if (!isAllowed) {
    return null;
  }

  return <>{children}</>;
}
