'use client';

import { useState, useEffect } from 'react';
import { useAuth } from '@/lib/auth/AuthContext';
import { EULADialog } from './EULADialog';
import { useRouter } from 'next/navigation';
import apiClient from '@/lib/api/client';

export function EULACheck() {
  const { user, logout, refreshUser } = useAuth();
  const router = useRouter();
  const [showDialog, setShowDialog] = useState(false);
  const [checking, setChecking] = useState(true);

  useEffect(() => {
    // Only check EULA acceptance for authenticated users
    if (user) {
      console.log('🔍 Checking EULA acceptance:', {
        userId: user.id,
        eulaAcceptedAt: user.eulaAcceptedAt,
        eulaVersion: user.eulaVersion,
      });

      // Show dialog if user hasn't accepted EULA
      if (!user.eulaAcceptedAt) {
        console.log('⚠️ User has not accepted EULA, showing dialog');
        setShowDialog(true);
      } else {
        console.log('✅ EULA already accepted on', user.eulaAcceptedAt);
      }
    }
    setChecking(false);
  }, [user]);

  const handleAccept = async () => {
    try {
      console.log('✅ User accepted EULA, calling API...');

      const response = await apiClient.post('/api/v1/auth/eula/accept', {
        version: '2025-10-04',
      });

      console.log('✅ EULA acceptance recorded:', response.data);

      // Close dialog immediately
      setShowDialog(false);

      // Refresh user data to get updated EULA acceptance
      await refreshUser();

      console.log('✅ User data refreshed after EULA acceptance');
    } catch (error) {
      console.error('❌ Failed to accept EULA:', error);
      alert('Failed to accept EULA. Please try again.');
    }
  };

  const handleDecline = async () => {
    console.log('❌ User declined EULA, logging out...');
    alert('You must accept the Terms of Service, Privacy Policy, and EULA to use ParentFlow.');
    await logout();
    router.push('/login');
  };

  // Don't render anything while checking or if user hasn't loaded
  if (checking || !user) {
    return null;
  }

  return (
    <EULADialog
      open={showDialog}
      onAccept={handleAccept}
      onDecline={handleDecline}
    />
  );
}
