from rest_framework import serializers

from cropmanagement.models import CropTranslation
from .models import Product, ProductCropMapping   # adjust the import path

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = "__all__"   # this will include all fields of Product
        
class ProductCatalogSerializer(serializers.ModelSerializer):
    brand_label = serializers.CharField(source="get_brand_display", read_only=True)
    type_label = serializers.CharField(source="get_type_display", read_only=True)
    catelog_link = serializers.SerializerMethodField()

    class Meta:
        model = Product
        fields = "__all__" 

    def get_catelog_link(self, obj):
        """
        Priority:
        1. language-based translated link from CatelogTranslation
        2. fallback to Product.catelog_link
        """
        translation_map = self.context.get("translation_map", {})
        translated_link = translation_map.get(obj.id)

        if translated_link:
            return translated_link

        return obj.catelog_link
    
    
class ProductCropMappingLiteSerializer(serializers.ModelSerializer):
    crop_name = serializers.SerializerMethodField()

    class Meta:
        model = ProductCropMapping
        fields = [
            "crop_name",
            "universal_moisture_threshold",
        ]

    def get_crop_name(self, obj):
        request = self.context.get("request")
        language_code = None

        if request:
            language_code = request.headers.get("Accept-Language")

        if language_code:
            language_code = language_code

            translation = CropTranslation.objects.filter(
                crop=obj.crop,
                language__code__iexact=language_code
            ).first()

            if translation and translation.name:
                return translation.name

        return obj.crop.name