from django.db import models
from apps.knowledge_base.models import KnowledgeBase


class AgentConfig(models.Model):
    name = models.CharField(max_length=255, unique=True, help_text="Agent name used by LiveKit worker")
    stt_provider = models.CharField(max_length=50, default="deepgram")
    tts_provider = models.CharField(max_length=50, default="elevenlabs")
    llm_provider = models.CharField(max_length=50, null=True, blank=True)
    llm_model = models.CharField(max_length=255, null=True, blank=True)
    system_prompt = models.TextField(default="", blank=True)
    default_language = models.CharField(max_length=10, default="en")
    knowledge_base = models.ForeignKey(
        KnowledgeBase, on_delete=models.SET_NULL, null=True, blank=True, related_name="agent_configs"
    )
    first_message_inbound = models.TextField(blank=True)
    first_message_outbound = models.TextField(blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = "agents_agent_config"


class AgentVoiceConfig(models.Model):
    agent_config = models.OneToOneField(
        AgentConfig, on_delete=models.CASCADE, related_name="voice_config"
    )
    voice_id = models.CharField(max_length=255, null=True, blank=True)
    tts_model_family = models.CharField(max_length=255, null=True, blank=True)
    similarity = models.FloatField(null=True, blank=True)
    speed = models.FloatField(null=True, blank=True)
    stability = models.FloatField(null=True, blank=True)
    output_format = models.CharField(max_length=64, null=True, blank=True)
    streaming_latency_optimization = models.PositiveSmallIntegerField(null=True, blank=True)
    text_normalisation_type = models.CharField(max_length=64, null=True, blank=True)
    pronunciation_dictionary_path = models.CharField(max_length=512, null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = "agents_agent_voice_config"


class AgentGuardrail(models.Model):
    agent_config = models.ForeignKey(
        AgentConfig, on_delete=models.CASCADE, related_name="guardrails"
    )
    guardrail_key = models.CharField(max_length=64)
    enabled = models.BooleanField(default=True)

    class Meta:
        db_table = "agents_agent_guardrail"
        unique_together = [["agent_config", "guardrail_key"]]


class AgentSystemTool(models.Model):
    agent_config = models.ForeignKey(
        AgentConfig, on_delete=models.CASCADE, related_name="system_tools"
    )
    tool_key = models.CharField(max_length=64)
    enabled = models.BooleanField(default=True)

    class Meta:
        db_table = "agents_agent_system_tool"
        unique_together = [["agent_config", "tool_key"]]
