"""
Mixin pour les modeles traduisibles.

Separe de helpers.py pour eviter les importations circulaires
(models.py -> helpers.py -> models.py).
"""


class TranslatableMixin:
    """
    Mixin a ajouter aux modeles pour faciliter l'acces aux traductions

    Utilisation:
        class Article(TranslatableMixin, models.Model):
            title = models.CharField(...)

        article = Article.objects.get(pk=1)
        title_fr = article.get_translated('title', 'fr')
        title_current = article.get_translated('title')  # langue par defaut
    """

    def get_translated(self, field, language_code=None, fallback=True):
        """
        Recupere la valeur traduite d'un champ

        Args:
            field: Nom du champ
            language_code: Code de la langue (optionnel)
            fallback: Retourner la valeur originale si pas de traduction

        Returns:
            Valeur traduite
        """
        from .models import Language
        from .helpers import get_translated_value

        if language_code is None:
            default_lang = Language.get_default()
            language_code = default_lang.code if default_lang else 'fr'

        return get_translated_value(self, field, language_code=language_code, fallback=fallback)

    def set_translation(self, field, language_code, value):
        """
        Definit une traduction

        Args:
            field: Nom du champ
            language_code: Code de la langue
            value: Valeur traduite
        """
        from .models import Dictionnaire
        Dictionnaire.set_translation(self, field, language_code, value)

    def get_all_translations(self, language_code=None):
        """
        Recupere toutes les traductions

        Args:
            language_code: Code de la langue (optionnel)

        Returns:
            Dict des traductions
        """
        from .helpers import get_all_translations
        return get_all_translations(self, language_code)

    def delete_translations(self):
        """Supprime toutes les traductions de cet objet"""
        from .models import Dictionnaire
        Dictionnaire.delete_translations_for_object(self)

    @classmethod
    def get_translatable_fields(cls):
        """Retourne la liste des champs traduisibles"""
        from .registry import get_translatable_fields
        return get_translatable_fields(cls)
