
import { ReactNode, useEffect } from 'react';
import { useNavigate } from 'react-router-dom';
import { useAuth } from '@/contexts/auth';
import { useToast } from '@/hooks/useToast.wrapper';

interface PrivateRouteProps {
  children: ReactNode;
  requireAuth?: boolean;
}

/**
 * 인증이 필요한 라우트를 보호하는 컴포넌트
 */
const PrivateRoute = ({ children, requireAuth = true }: PrivateRouteProps) => {
  const { user, loading } = useAuth();
  const navigate = useNavigate();
  const { toast } = useToast();

  useEffect(() => {
    // 로딩 중이 아니고, 인증이 필요한데 사용자가 로그인되어 있지 않은 경우
    if (!loading && requireAuth && !user) {
      toast({
        title: "로그인 필요",
        description: "이 페이지에 접근하려면 로그인이 필요합니다.",
        variant: "destructive",
      });
      navigate('/login', { replace: true });
    }
  }, [user, loading, navigate, requireAuth, toast]);

  // 로딩 중이거나 인증이 필요하지만 사용자가 로그인되어 있지 않은 경우 아무것도 렌더링하지 않음
  if (loading || (requireAuth && !user)) {
    return null;
  }

  return <>{children}</>;
};

export default PrivateRoute;
