from django.db import models


class ChatSession(models.Model):
    session_key = models.CharField(max_length=64, unique=True)
    visitor_name = models.CharField(max_length=120, blank=True)
    visitor_email = models.EmailField(blank=True)
    visitor_phone = models.CharField(max_length=30, blank=True)
    ip_address = models.GenericIPAddressField(blank=True, null=True)
    converted_to_lead = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['-updated_at']

    def __str__(self):
        return f"Chat {self.session_key[:8]} — {self.visitor_name or 'anonymous'}"


class ChatMessage(models.Model):
    ROLE_CHOICES = [('user', 'User'), ('assistant', 'Assistant')]
    session = models.ForeignKey(ChatSession, on_delete=models.CASCADE, related_name='messages')
    role = models.CharField(max_length=10, choices=ROLE_CHOICES)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['created_at']

    def __str__(self):
        return f"{self.role}: {self.content[:60]}"


class ChatbotKnowledge(models.Model):
    """Custom Q&A knowledge base injected into the AI prompt."""
    question = models.CharField(max_length=255)
    answer = models.TextField()
    keywords = models.CharField(max_length=255, blank=True, help_text='Comma-separated triggers for rule-based matching')
    is_active = models.BooleanField(default=True)
    order = models.PositiveIntegerField(default=0)

    class Meta:
        ordering = ['order', 'question']
        verbose_name_plural = 'Chatbot knowledge'

    def __str__(self):
        return self.question
