# Create: users/utils/auth_utils.py

from rest_framework.authtoken.models import Token
from rest_framework.response import Response
from rest_framework import status
from users.serializers.users_serializer import UserSerializer
from users.utils.agent_utils import get_agent_data
import logging

logger = logging.getLogger(__name__)


# users/utils/auth_utils.py

def authenticate_user(user, request):
    """
    Authenticate user and build login response
    
    Args:
        user: User instance
        request: Request object
        
    Returns:
        Response: Response object with token and user data
    """
    if not user.email_verified:
        logger.debug("User email not verified")
        return Response({
            "error": "Email not verified. Please Do Register Again"
        }, status=status.HTTP_403_FORBIDDEN)

    # Create or get token
    token, created = Token.objects.get_or_create(user=user)
    logger.debug(f"Token created: {created}, Token: {token.key}")

    # Build response
    response_data = {
        "token": token.key,
        "user": UserSerializer(user, context={'request': request}).data, # Pass request here too for User images
        "custom_permissions": []
    }

    # Add agent data if user is an agent
    # Pass the request object here!
    agent_data = get_agent_data(user, request)
    if agent_data:
        response_data.update(agent_data)

    return Response(response_data, status=status.HTTP_200_OK)

def get_user_by_credential(email=None, user_id=None):
    """
    Get user by email or ID
    
    Args:
        email: User email
        user_id: User ID
        
    Returns:
        User instance or None
    """
    from users.models.users import User
    
    try:
        if email:
            return User.objects.get(email=email)
        elif user_id:
            return User.objects.get(id=user_id)
        return None
    except User.DoesNotExist:
        return None