import hashlib

from rest_framework.throttling import ScopedRateThrottle, SimpleRateThrottle


class AccountIPThrottle(ScopedRateThrottle):
    def get_ident(self, request):
        # Never accept an arbitrary client-supplied X-Forwarded-For.
        return request.META.get("REMOTE_ADDR", "")


class AccountEmailThrottle(SimpleRateThrottle):
    scope = "account_email"

    def get_cache_key(self, request, view):
        email = request.data.get("email") if hasattr(request.data, "get") else None
        if not isinstance(email, str) or not email.strip():
            return None
        digest = hashlib.sha256(email.strip().lower().encode()).hexdigest()
        return self.cache_format % {"scope": self.scope, "ident": digest}


class AccountSecurityUserThrottle(SimpleRateThrottle):
    scope = 'account_security'

    def get_cache_key(self,request,view):
        if not request.user.is_authenticated:
            return None
        return self.cache_format % {'scope':self.scope,'ident':'user:'+str(request.user.pk)}
