"""Desktop-auth Pydantic schemas."""
from __future__ import annotations
from datetime import datetime
from typing import Literal, Optional
from uuid import UUID

from pydantic import BaseModel, Field


class DesktopAuthStartRequest(BaseModel):
    app_name: Optional[str] = None
    os: Optional[str] = None


class DesktopAuthStartResponse(BaseModel):
    auth_id: UUID
    login_code: str
    user_code: str
    browser_url: str
    expires_at: datetime


class DesktopAuthCompleteRequest(BaseModel):
    user_code: str


class DesktopAuthCompleteResponse(BaseModel):
    status: Literal["completed"]
    auth_id: UUID


class DesktopAuthExchangeRequest(BaseModel):
    login_code: str


class DesktopAuthExchangeResponse(BaseModel):
    status: Literal["pending", "completed", "exchanged", "expired"]
    desktop_session: Optional[str] = None
    expires_in: Optional[int] = None
    user_id: Optional[UUID] = None


class BrowserHandoffRequest(BaseModel):
    next: str = Field(default="/billing")


class BrowserHandoffResponse(BaseModel):
    url: str
    expires_in: int


class BrowserHandoffConsumeRequest(BaseModel):
    token: str
