# /home/ram/aparsoft/backend/apps/accounts/services/auth.py

# backend/apps/accounts/api/serializers/auth.py

from rest_framework_simplejwt.authentication import JWTAuthentication
from django.conf import settings
from rest_framework.authentication import CSRFCheck
from rest_framework import exceptions


class CustomJWTCookieAuthentication(JWTAuthentication):
    """
    Custom authentication class that validates JWT tokens from cookies.
    Supports both cookie-based and header-based authentication.
    """

    def authenticate(self, request):
        # First try to get the token from the cookie
        header = self.get_header(request)

        if header is None:
            # Try to get token from cookies
            auth_cookie_name = settings.SIMPLE_JWT.get('AUTH_COOKIE', 'access_token')
            access_token = request.COOKIES.get(auth_cookie_name)
            if access_token:
                raw_token = access_token
            else:
                return None
        else:
            # Get token from Authorization header
            raw_token = self.get_raw_token(header)
            if raw_token is None:
                return None

        validated_token = self.get_validated_token(raw_token)
        user = self.get_user(validated_token)

        # Update last_active timestamp
        user.update_last_active(save=True)

        return user, validated_token

    def enforce_csrf(self, request):
        """
        Enforce CSRF validation for cookie-based authentication.
        """
        check = CSRFCheck()
        check.process_request(request)
        reason = check.process_view(request, None, (), {})
        if reason:
            raise exceptions.PermissionDenied('CSRF Failed: %s' % reason)
