"""
Decoradores de Rate Limiting — Core
=====================================
Decoradores preconfigurados para rate limiting (OWASP A04).
"""

from django.http import JsonResponse
from django_ratelimit.decorators import ratelimit


def ratelimit_login(view_func):
    """Rate limit para login: 5 intentos por minuto por IP."""
    return ratelimit(key="ip", rate="5/m", method="POST", block=True)(view_func)


def ratelimit_api(view_func):
    """Rate limit para API: 100 requests por hora por usuario autenticado."""
    return ratelimit(key="user_or_ip", rate="100/h", method=ratelimit.ALL, block=True)(view_func)


def ratelimit_register(view_func):
    """Rate limit para registro: 3 intentos por hora por IP."""
    return ratelimit(key="ip", rate="3/h", method="POST", block=True)(view_func)


def ratelimit_password_reset(view_func):
    """Rate limit para reset de contraseña: 3 intentos por hora por IP."""
    return ratelimit(key="ip", rate="3/h", method="POST", block=True)(view_func)
