from django.conf import settings
from rest_framework_simplejwt.authentication import JWTAuthentication

from rest_framework.authentication import TokenAuthentication
from rest_framework.exceptions import AuthenticationFailed
from django.http import HttpRequest
import logging

logger = logging.getLogger(__name__)

class CustomJWTAuthentication(JWTAuthentication):
    def authenticate(self, request):
        try:
            header = self.get_header(request)
            logger.debug(f"Auth header: {header}")

            if header is None:
                raw_token = request.COOKIES.get(settings.AUTH_COOKIE)
                logger.debug(f"Token from cookie: {raw_token[:20] if raw_token else None}...")
            else:
                raw_token = self.get_raw_token(header)
                logger.debug(f"Token from header: {raw_token[:20] if raw_token else None}...")
            
            if raw_token is None:
                logger.debug("No token found")
                return None

            validated_token = self.get_validated_token(raw_token)
            logger.debug(f"Token validated successfully for user: {self.get_user(validated_token).email}")

            return self.get_user(validated_token), validated_token
        except Exception as e:
            logger.error(f"Authentication error: {str(e)}")
            return None