"""Provider broker transport contracts. No credential fields in responses."""

from typing import Literal
from uuid import UUID

from pydantic import BaseModel, Field

GrantFamily = Literal[
    "identity", "calendar", "drive", "docs", "sheets", "analytics", "gtm", "ads", "crm"
]


class StartAuthorization(BaseModel):
    grant_family: GrantFamily
    connection_id: UUID | None = None
    return_to: str = Field("/connectors", max_length=2048)
    browser_binding: str = Field(min_length=32, max_length=256)


class AuthorizationStarted(BaseModel):
    authorize_url: str
    resume_id: UUID
    status: str = "authorization_required"


class CompleteAuthorization(BaseModel):
    state: str = Field(min_length=32, max_length=2048)
    code: str | None = Field(None, max_length=4096)
    error: str | None = Field(None, max_length=128)
    browser_binding: str = Field(min_length=32, max_length=256)


class AuthorizationCompleted(BaseModel):
    purpose: Literal["identity", "authorization"] = "authorization"
    return_to: str
    resume_id: UUID
    status: str


class IdentityStart(BaseModel):
    project_id: UUID
    return_to: str = Field(max_length=2048)
    cloud_binding: str = Field(min_length=32, max_length=256)


class IdentityBind(BaseModel):
    state: str = Field(min_length=32, max_length=2048)
    browser_binding: str = Field(min_length=32, max_length=256)


class IdentityConsume(BaseModel):
    project_id: UUID
    ticket: str = Field(min_length=32, max_length=256)
    cloud_binding: str = Field(min_length=32, max_length=256)
