from typing import Any, Dict, Optional

from pydantic import BaseModel, Field


class AnalyticsTokensInput(BaseModel):
    prompt_tokens: int = Field(..., ge=0)
    cached_tokens: int = Field(default=0, ge=0)
    total_tokens: int = Field(..., ge=0)


class AnalyticsTokensOutput(BaseModel):
    completion_tokens: int = Field(..., ge=0)
    reasoning_tokens: int = Field(default=0, ge=0)
    total_tokens: int = Field(..., ge=0)


class AnalyticsLogRequest(BaseModel):
    city: Optional[str] = None
    zavedenia_id: int = Field(default=-1)
    service: str = Field(..., min_length=1)
    model: str = Field(..., min_length=1)
    tokens_input: AnalyticsTokensInput
    tokens_output: AnalyticsTokensOutput
    data_input: Dict[str, Any]
    data_output: Dict[str, Any]
    execution_time: int = Field(..., ge=0)
