"use client";

import {
  createContext,
  useContext,
  useEffect,
  useState,
  ReactNode,
} from "react";
import { useRouter } from "next/navigation";
import { WOSA_ADMIN_URL } from "@/config/site-config";
import { UnknownRecord } from "@/types";
import Cookies from "js-cookie";

interface SessionContextType {
  sessionData: UnknownRecord | null;
  isLoading: boolean;
}

const SessionContext = createContext<SessionContextType>({
  sessionData: null,
  isLoading: true,
});

export function useSession() {
  return useContext(SessionContext);
}

interface SessionProviderProps {
  children: ReactNode;
}

export function SessionProvider({ children }: SessionProviderProps) {
  const [sessionData, setSessionData] = useState<UnknownRecord | null>(null);
  const [isLoading, setIsLoading] = useState(true);
  const router = useRouter();

  useEffect(() => {
    async function validateSession() {
      try {
        const sessionId = Cookies.get("session_id");

        if (!sessionId) {
          router.push(`${WOSA_ADMIN_URL}dashboard`);
          return;
        }

        const response = await fetch("/api/validate-session", {
          method: "POST",
          headers: { "Content-Type": "application/json" },
          body: JSON.stringify({ session_id: sessionId }),
        });

        if (response.ok) {
          const data = await response.json();
          setSessionData(data);
        } else {
          router.push(`${WOSA_ADMIN_URL}dashboard`);
        }
      } catch (error) {
        console.error("Session validation failed:", error);
        router.push(`${WOSA_ADMIN_URL}dashboard`);
      } finally {
        setIsLoading(false);
      }
    }

    validateSession();
  }, [router]);

  return (
    <SessionContext.Provider value={{ sessionData, isLoading }}>
      {children}
    </SessionContext.Provider>
  );
}
