from sqlalchemy.orm import Session
from typing import List, Optional
from datetime import datetime
from schemas.ai_assistants import ( AIAssistantCreate, AIAssistantUpdate )
from models import AIAssistant
from app.utils.retell_client import RetellAIManager

retell_manager = RetellAIManager()

async def create_ai_assistant(db: Session, data: AIAssistantCreate, retell_agent_id: Optional[str] = None) -> AIAssistant:
    

    
    
    
    agent_config = {
            "agent_name": data.name,
            "voice_id": data.voice_id,
            "voice_model": data.voice_model,
            "llm_websocket_url": data.llm_websocket_url,
            "voice_temperature": 1.0,
            "voice_speed": 1.0,
            "responsiveness": 1.0,
            "interruption_sensitivity": 1.0,
            "enable_backchannel": True,
            "normalize_for_speech": True,
            "enable_voicemail_detection": True,
            "voicemail_detection_timeout_ms": 30000,
            "llm": {
                "provider": "openai",
                "model": "gpt-4",
                "temperature": 0.7,
                "system_prompt": data.system_prompt
            }
    }

        # Create agent in Retell AI
    retell_response = await retell_manager.create_agent(agent_config)
        
    assistant = AIAssistant(
        retell_agent_id=retell_agent_id,
        name=data.name,
        gender=data.gender,
        accent=data.accent,
        personality=data.personality,
        voice_id=data.voice_id,
        voice_model=data.voice_model,
        system_prompt=data.system_prompt
    )
    
    db.add(assistant)
    db.commit()
    db.refresh(assistant)
    return assistant

def update_ai_assistant(db: Session, assistant_id: int, data: AIAssistantUpdate) -> Optional[AIAssistant]:
    assistant = db.query(AIAssistant).filter(AIAssistant.id == assistant_id).first()
    if not assistant:
        return None

    for field, value in data.dict(exclude_unset=True).items():
        setattr(assistant, field, value)

    assistant.updated_at = datetime.utcnow()
    db.commit()
    db.refresh(assistant)
    return assistant

def list_ai_assistants(db: Session) -> List[AIAssistant]:
    return db.query(AIAssistant).all()