'use client';

import { 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 SessionProviderProps {
  children: ReactNode;
}

export default function SessionProvider({ children }: SessionProviderProps) {
  const [sessionData, setSessionData] = useState<UnknownRecord | null>(null);
  const [loading, setLoading] = 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;
        }

        // Call your API to validate session
        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 {
        setLoading(false);
      }
    }

    validateSession();
  }, [router]);

  if (loading) {
    return <div>Loading...</div>; // or a proper loading component
  }

  if (!sessionData) {
    return null;
  }

  // Wrap children in a fragment
  return <>{children}</>;
}
