from django.conf import settings
from allauth.account.adapter import DefaultAccountAdapter
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter


class BFOBAdapter(DefaultAccountAdapter):
    def is_open_for_signup(self, request):
        return False


class BFOBSocialAdapter(DefaultSocialAccountAdapter):
    def is_open_for_signup(self, request, sociallogin):
        return True

    def pre_social_login(self, request, sociallogin):
        guild_data = sociallogin.account.extra_data.get("guild_data", {})
        roles = set(guild_data.get("roles", []))
        should_be_admin = str(settings.DISCORD_ADMIN_ROLE) in roles or (
            settings.DEBUG and guild_data == {}
        )
        user = sociallogin.user
        if user.is_staff != should_be_admin or user.is_superuser != should_be_admin:
            user.is_staff = should_be_admin
            user.is_superuser = should_be_admin
            user.save()
        return