from django.db import models


class KnowledgeBase(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField(blank=True)
    embedding_model = models.CharField(max_length=255, null=True, blank=True)
    chunk_size = models.PositiveIntegerField(default=1000)
    chunk_overlap = models.PositiveIntegerField(default=200)
    is_active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = "knowledge_base_knowledge_base"


class Document(models.Model):
    class SourceType(models.TextChoices):
        FILE = "file", "File"
        GOOGLE_SHEET = "google_sheet", "Google Sheet"
        WEB_URL = "web_url", "Web URL"

    knowledge_base = models.ForeignKey(
        KnowledgeBase, on_delete=models.CASCADE, related_name="documents"
    )
    source_type = models.CharField(max_length=20, choices=SourceType.choices, default=SourceType.FILE)
    name = models.CharField(max_length=255)
    file_path = models.CharField(max_length=512, null=True, blank=True)
    mime_type = models.CharField(max_length=128, null=True, blank=True)
    file_size = models.PositiveIntegerField(null=True, blank=True)
    google_sheet_id = models.CharField(max_length=255, null=True, blank=True)
    web_url = models.URLField(max_length=2048, null=True, blank=True)
    status = models.CharField(max_length=20, default="pending")
    last_synced_at = models.DateTimeField(null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = "knowledge_base_document"


class Chunk(models.Model):
    document = models.ForeignKey(Document, on_delete=models.CASCADE, related_name="chunks")
    knowledge_base = models.ForeignKey(
        KnowledgeBase, on_delete=models.CASCADE, related_name="chunks"
    )
    chunk_index = models.PositiveIntegerField(default=0)
    text = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = "knowledge_base_chunk"
