from datetime import datetime, timezone, timedelta
from typing import Optional
from pydantic import BaseModel, Field, field_validator
from src.core.validators import validate_phone


class LogCallRequest(BaseModel):
    sender_name: str = Field(min_length=2, max_length=255)
    sender_phone: str  # required for calls
    call_date: datetime
    agent_name: str = Field(min_length=2, max_length=255)
    notes: Optional[str] = Field(default=None, max_length=2000)

    @field_validator('sender_phone', mode='before')
    @classmethod
    def _validate_phone(cls, v):
        return validate_phone(v)

    @field_validator('call_date')
    @classmethod
    def _not_far_future(cls, v: datetime) -> datetime:
        now = datetime.now(timezone.utc)
        if v.tzinfo is None:
            v = v.replace(tzinfo=timezone.utc)
        if v > now + timedelta(minutes=5):
            raise ValueError("call_date cannot be more than 5 minutes in the future")
        return v
