from django.contrib.auth.backends import BaseBackend
from django.contrib.auth import get_user_model
from . import mcp_client

User = get_user_model()


class MCPAuthBackend(BaseBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        email = username or kwargs.get("email")
        if not email or not password:
            return None

        try:
            # Delegate validation to MCP
            res = mcp_client.verify_login(email, password)
            if res.get("verified", False):
                # Retrieve from local Django database
                user = User.objects.filter(email=email).first()
                if not user:
                    # Mirror/auto-create the user locally
                    user = User.objects.create_user(
                        email=email,
                        username=email,
                        role=res.get("role", "ADMIN"),
                        is_staff=res.get("role") == "ADMIN",
                        is_superuser=res.get("role") == "ADMIN",
                    )
                return user
        except Exception:
            return None
        return None

    def get_user(self, user_id):
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None
