from pydantic import BaseModel
from typing import Optional, Dict, Any, List
from datetime import datetime


class SampleAgentSchema(BaseModel):
    id: int
    name: str
    gender: str
    about: str
    voice_id: Optional[str]
    webhook_url: str
    language: str
    response_engine: Optional[Any]
    voicemail_option: Optional[Any]
    llmCreate: Optional[Any]
    class Config:
        from_attributes = True  # ✅ so ORM objects work directly
        
class AgentListResponse(BaseModel):
    message: str
    agents: List[SampleAgentSchema]  # 👈 wrap agents inside



class AgentCreateSample(BaseModel):
    name: str
    gender: str
    about: str
    webhook_url: str
    voice_id: str
    language: str
    response_engine: Dict[str, Any]
    voicemail_option: Optional[Dict[str, Any]] = None
    llmCreate: Dict[str, Any]

class AgentBase(BaseModel):
    name: str
    gender: str
    about: str
    webhook_url: str
    language: str
    voice_id: str
    response_engine: Dict[str, Any]
    voicemail_option: Dict[str, Any]
    llmCreate: Dict[str, Any]
    company_id: int 
    
class AgentCreate(BaseModel):
    sample_agent_id: int
    voicemail_option: Optional[Any] = None 
    company_id: Optional[str] = None  # optional field



class ResponseEngine(BaseModel):
    llm_id: str
    type: str
    version: int

class LlmCreate(BaseModel):
    llm_id: str
    model: str
    begin_message: str
    # add other fields here as needed
    
class AgentResponse(AgentBase):
    id: int
    response_engine: Optional[ResponseEngine] = None  # make optional
    llmCreate: Optional[LlmCreate] = None
    company_id: Optional[str] = None  # make optional
    
class AgentCreateResponse(BaseModel):
    message: str
    agent: AgentResponse    


class AgentLiveResponse(BaseModel):
    message: str
    agent: AgentResponse    

    class Config:
        orm_mode = True

class BotRequest(BaseModel):
    company_id: int
    bot_name: str
    bot_voiceId: str
    bot_model: str
    bot_system_prompt: str  # base prompt you write
    bot_firstMessage: str
    bot_voicemailMessage: str
    bot_endCallMessage: str
    serverUrl: str


class BookingRequest(BaseModel):
    customer_name: str
    phone: str
    appointment_time: datetime
    service: str | None = None