"use client";

import type { AuthChangeEvent, Session } from "@supabase/supabase-js";
import { usePathname, useRouter } from "next/navigation";
import { useEffect } from "react";
import supabase from "../../utils/supabase/client";

export default function AuthGuard({ children }: { children: React.ReactNode }) {
  const router = useRouter();
  const pathname = usePathname();

  useEffect(() => {
    supabase.auth
      .getSession()
      .then(({ data }: { data: { session: Session | null } }) => {
        if (!data.session && pathname !== "/login") {
          router.replace("/login");
        }
        if (data.session && pathname === "/login") {
          router.replace("/");
        }
      });
    const { data: listener } = supabase.auth.onAuthStateChange(
      (_event: AuthChangeEvent, session: Session | null) => {
        if (!session && pathname !== "/login") {
          router.replace("/login");
        }
        if (session && pathname === "/login") {
          router.replace("/");
        }
      }
    );
    return () => {
      listener.subscription.unsubscribe();
    };
  }, [router, pathname]);

  return <>{children}</>;
}
