"use client";

import { useEffect } from 'react';
import { useDispatch } from 'react-redux';
import { AppDispatch } from '@/store/store';
import { getCurrentUser, refreshToken, setInitialized } from '@/store/slices/auth-slice';

export default function AuthInitializer() {
  const dispatch = useDispatch<AppDispatch>();

  useEffect(() => {
    let refreshIntervalId: NodeJS.Timeout;

    const initializeAuth = async () => {
      // First, try to get current user to check if we're authenticated
      const result = await dispatch(getCurrentUser());
      
      // If getCurrentUser failed, try to refresh token
      if (getCurrentUser.rejected.match(result)) {
        console.log('getCurrentUser failed, attempting token refresh...');
        const refreshResult = await dispatch(refreshToken());
        
        // After refresh, if successful, try to get user again
        if (refreshToken.fulfilled.match(refreshResult)) {
           await dispatch(getCurrentUser());
        }
      }
      
      // Mark initialization as sequence complete
      dispatch(setInitialized());

      // Set up automatic token refresh every 14 minutes
      refreshIntervalId = setInterval(async () => {
        console.log('Performing scheduled token refresh...');
        const refreshResult = await dispatch(refreshToken());
        
        // If refresh fails, try to get current user to see if we're still authenticated
        if (refreshToken.rejected.match(refreshResult)) {
          console.log('Scheduled refresh failed, checking authentication status...');
          await dispatch(getCurrentUser());
        }
      }, 14 * 60 * 1000); // Refresh every 14 minutes
    };

    // Initialize auth
    initializeAuth();

    return () => {
      if (refreshIntervalId) {
        clearInterval(refreshIntervalId);
      }
    };
  }, [dispatch]);

  return null;
}