from django.db import models
from apps.core.models import BaseModel


class Language(BaseModel):
    code = models.CharField(max_length=10, unique=True, db_index=True)
    name = models.CharField(max_length=200)
    native_name = models.CharField(max_length=200, blank=True)
    is_active = models.BooleanField(default=True, db_index=True)

    def __str__(self):
        return f"{self.code} - {self.name}"


class Currency(BaseModel):
    code = models.CharField(max_length=10, unique=True, db_index=True)
    name = models.CharField(max_length=200)
    symbol = models.CharField(max_length=10, blank=True)
    is_active = models.BooleanField(default=True, db_index=True)

    def __str__(self):
        return f"{self.code} - {self.name}"


class Category(BaseModel):
    name = models.CharField(max_length=200)
    description = models.TextField(blank=True)
    is_active = models.BooleanField(default=True, db_index=True)

    def __str__(self):
        return self.name

    class Meta:
        indexes = [models.Index(fields=['name'])]


class CategoryTranslation(BaseModel):
    category = models.ForeignKey(Category, related_name='translations', on_delete=models.CASCADE, db_index=True)
    language = models.ForeignKey(Language, related_name='category_translations', on_delete=models.CASCADE, db_index=True)
    name = models.CharField(max_length=200)

    class Meta:
        constraints = [
            models.UniqueConstraint(fields=['category', 'language'], name='unique_category_language'),
        ]

    def __str__(self):
        return f"{self.category.name} ({self.language.code})"


class DocumentType(BaseModel):
    name = models.CharField(max_length=200)
    code = models.CharField(max_length=100, unique=True, db_index=True)
    is_active = models.BooleanField(default=True, db_index=True)

    def __str__(self):
        return self.name
