from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
from .models import Membership

class MembershipAuthBackend(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        # First try membership number
        try:
            # Check if the username is a membership number
            membership = Membership.objects.get(
                membership_number=username.upper(),
                membership_status='approved',
                payment_verified=True
            )
            if membership.user and membership.user.check_password(password):
                return membership.user
        except Membership.DoesNotExist:
            pass

        # If membership auth fails, try default authentication
        try:
            user = User.objects.get(username=username)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
            pass

        return None

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