'use client';

import { useEffect, useState } from 'react';
import Cookies from 'js-cookie';
import { useAppDispatch, useAppSelector } from '@/store/hooks';
import { api } from '@/lib/axios';

export function AuthProvider({ children }: { children: React.ReactNode }) {
  const dispatch = useAppDispatch();
  const authenticated = useAppSelector((state) => state.auth.authenticated);
  const [initializing, setInitializing] = useState(true);

  useEffect(() => {
    async function initAuth() {
      const refreshToken = Cookies.get('refreshToken');
      if (!authenticated && refreshToken) {
        try {
          // Triggers interceptor/refresh function to restore state
          await api.get('/users/me');
        } catch {
          // Token expired or invalid
        }
      }
      setInitializing(false);
    }
    initAuth();
  }, [authenticated, dispatch]);

  if (initializing) {
    return <div className="flex h-screen items-center justify-center">Loading Session...</div>;
  }

  return <>{children}</>;
}