import logging
from django.core.cache import cache
from django.http import HttpResponseForbidden
from regulations.utils.ip import get_client_ip

logger = logging.getLogger(__name__)

class AntiSpamMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if request.method == 'POST' and (
            request.path.startswith('/subscribe/') or 
            request.path.startswith('/contact/') or 
            request.path.startswith('/contacts/')
        ):
            logger.info(f"Memeriksa spam untuk path: {request.path}")

            if request.session.get('recaptcha_passed', False):
                logger.info("CAPTCHA sudah lolos, melewati pengecekan spam.")
                return self.get_response(request)

            ip = get_client_ip(request)
            email = request.POST.get('email', '').strip().lower()

            ip_cache_key = f"form_submission_ip_{ip}"
            email_cache_key = f"form_submission_email_{email}"

            ip_submission_count = cache.get(ip_cache_key, 0)
            email_submission_count = cache.get(email_cache_key, 0)

            logger.info(f"IP: {ip}, Jumlah Pengiriman: {ip_submission_count}")
            logger.info(f"Email: {email}, Jumlah Pengiriman: {email_submission_count}")

            if ip_submission_count >= 3 or email_submission_count >= 3:
                logger.warning(f"🚨 Spam terdeteksi! IP: {ip}, Email: {email}")
                return HttpResponseForbidden("Anda telah mencapai batas pengiriman form.")

            cache.set(ip_cache_key, ip_submission_count + 1, 3600)  # Simpan 1 jam
            cache.set(email_cache_key, email_submission_count + 1, 3600)

        return self.get_response(request)
