import { Navigate } from 'react-router-dom';
import { useAuth } from '../hooks/useAuth';

interface ProtectedRouteProps {
    children: React.ReactNode;
    requiredPermission?: string;
    requiredPermissions?: string[];
    requireAll?: boolean;
}

const ProtectedRoute = ({
    children,
    requiredPermission,
    requiredPermissions = [],
    requireAll = false
}: ProtectedRouteProps) => {
    const { isAuthenticated, hasPermission, hasAnyPermission, hasAllPermissions } = useAuth();

    if (!isAuthenticated) {
        return <Navigate to="/" replace />;
    }

    // Check single permission
    if (requiredPermission && !hasPermission(requiredPermission)) {
        return <Navigate to="/unauthorized" replace />;
    }

    // Check multiple permissions
    if (requiredPermissions.length > 0) {
        const hasAccess = requireAll
            ? hasAllPermissions(requiredPermissions)
            : hasAnyPermission(requiredPermissions);

        if (!hasAccess) {
            return <Navigate to="/unauthorized" replace />;
        }
    }

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

export default ProtectedRoute;
