"""passbook provider"""
from allauth.socialaccount.providers.base import ProviderAccount
from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider


class PassbookAccount(ProviderAccount):
    """passbook account"""

    def to_str(self):
        dflt = super().to_str()
        return self.account.extra_data.get('username', dflt)


class PassbookProvider(OAuth2Provider):
    """passbook provider"""

    id = 'passbook'
    name = 'passbook'
    account_class = PassbookAccount

    def extract_uid(self, data):
        return str(data['sub'])

    def extract_common_fields(self, data):
        return {
            'email': data.get('email'),
            'username': data.get('preferred_username'),
            'name': data.get('name'),
        }

    def get_default_scope(self):
        return ['openid:userinfo']


provider_classes = [PassbookProvider] # noqa