from ..rfc6749 import TokenMixin


class IntrospectionToken(dict, TokenMixin):
    def get_client_id(self):
        return self.get('client_id')

    def get_scope(self):
        return self.get('scope')

    def get_expires_in(self):
        # this method is only used in refresh token,
        # no need to implement it
        return 0

    def get_expires_at(self):
        return self.get('exp', 0)

    def __getattr__(self, key):
        # https://tools.ietf.org/html/rfc7662#section-2.2
        available_keys = {
            'active', 'scope', 'client_id', 'username', 'token_type',
            'exp', 'iat', 'nbf', 'sub', 'aud', 'iss', 'jti'
        }
        try:
            return object.__getattribute__(self, key)
        except AttributeError as error:
            if key in available_keys:
                return self.get(key)
            raise error
