'use client';

import { useEffect } from 'react';
import { useRouter } from 'next/navigation';
import { useAuth } from './AuthContext';
import { LoadingScreen } from './LoadingScreen';

interface ClientAuthInterceptorProps {
  children: React.ReactNode;
}

export function ClientAuthInterceptor({ children }: ClientAuthInterceptorProps) {
  const { user, isAuthenticated, loading } = useAuth();
  const router = useRouter();

  useEffect(() => {
    // 如果正在加载，等待加载完成
    if (loading) {
      return;
    }

    const currentPath = window.location.pathname;

    // 如果已经在认证页面（包括 /login 开头的所有路径、/register 和根路径），不需要重定向
    if (currentPath.startsWith('/login') || currentPath === '/register' || currentPath === '/') {
      console.log(`📄 已在认证页面，跳过拦截: ${currentPath}`);
      return;
    }

    // 如果未认证，重定向到登录页
    if (!isAuthenticated) {
      console.log(`🔒 客户端拦截：未认证用户访问 ${currentPath}，重定向到登录页`);

      // 保存当前路径，登录后可以跳转回来
      const loginUrl = `/login${currentPath !== '/' ? `?redirect=${encodeURIComponent(currentPath)}` : ''}`;
      router.push(loginUrl);
      return;
    }

    console.log(`✅ 客户端认证通过：用户 ${user?.username} 访问 ${window.location.pathname}`);
  }, [isAuthenticated, loading, user, router]);

  const currentPath = typeof window !== 'undefined' ? window.location.pathname : '';

  // 如果正在加载，显示加载状态
  if (loading) {
    return <LoadingScreen variant="auth" />;
  }

  // 如果在认证页面（包括 /login 开头的所有路径、/register 和根路径），直接渲染子组件，不需要认证检查
  if (currentPath.startsWith('/login') || currentPath === '/register' || currentPath === '/') {
    return <>{children}</>;
  }

  // 认证通过，渲染子组件
  return <>{children}</>;
}