"""
Pydantic schemas for the Authorization list and summary endpoints.
"""
from pydantic import BaseModel, ConfigDict
from typing import Optional, List
from datetime import datetime


class AuthorizationListItem(BaseModel):
    id: int
    authorization_id: Optional[str] = None
    authorization_literal: Optional[str] = None
    authorization_type: str
    authorization_date: Optional[datetime] = None
    status: Optional[str] = None
    is_verified: bool
    payment_request_id: int
    auth_amount: Optional[float] = None
    frequency: Optional[str] = None
    customer_id: int
    account_name: str
    customer_ref: Optional[str] = None
    payer_name: Optional[str] = None
    payer_email: Optional[str] = None
    created_at: datetime
    expired_at: Optional[datetime] = None

    model_config = ConfigDict(from_attributes=True)


class AuthorizationListResponse(BaseModel):
    items: List[AuthorizationListItem]
    total: int
    page: int
    per_page: int
    total_pages: int


class AuthorizationSummaryAccount(BaseModel):
    customer_id: int
    account_name: str
    total_amount: Optional[float] = None
    authorization_count: int


class AuthorizationSummaryResponse(BaseModel):
    highest_paying: List[AuthorizationSummaryAccount]
    lowest_paying: List[AuthorizationSummaryAccount]
    most_frequent: List[AuthorizationSummaryAccount]
