# Copyright (C) 2023 Cochise Ruhulessin
#
# All rights reserved. No warranty, explicit or implicit, provided. In
# no event shall the author(s) be liable for any claim or damages.
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
from typing import Protocol

from headless.ext.oauth2.models import TokenResponse

from .authorizationrequestidentifier import AuthorizationRequestIdentifier
from .clientidentifier import ClientIdentifier
from .objectidentifier import ObjectIdentifier
from .oidcprovider import OIDCProvider


class IExternalAuthorizationState(Protocol):

    @property
    def id(self) -> ObjectIdentifier['IExternalAuthorizationState']: ...

    @property
    def client_id(self) -> ClientIdentifier: ...

    @property
    def kind(self) -> str: ...

    @property
    def request_id(self) -> AuthorizationRequestIdentifier: ...

    async def obtain(self, provider: OIDCProvider, code: str, url: str, iss: str | None = None) -> TokenResponse: ...