from rest_framework import serializers
from .models import Product, PriceType, PriceList, Discount, PriceChangeHistory, PriceTag, DiscountHistory, PriceListWithDiscount

# Сериализатор для модели Product
class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ['id', 'name', 'manufacturer_name', 'manufacturer_country', 'manufacturer_code', 'dimensions', 'unit_of_measure', 'shelf_life_days', 'barcode']
        ref_name = 'PricingProductSerializer'  # Unique ref_name for pricing


# Сериализатор для модели PriceType
class PriceTypeSerializer(serializers.ModelSerializer):
    class Meta:
        model = PriceType
        fields = ['id', 'name']
        ref_name = 'PricingPriceTypeSerializer'  # Unique ref_name for pricing


# Сериализатор для модели PriceList
class PriceListSerializer(serializers.ModelSerializer):
    product = ProductSerializer()  # Вложенный сериализатор для связи с продуктом
    price_type = PriceTypeSerializer()  # Вложенный сериализатор для связи с типом цены

    class Meta:
        model = PriceList
        fields = ['id', 'product', 'price_type', 'entry_price', 'final_price', 'date_effective', 'constraint_percent_limit', 'constraint_price_change']
        ref_name = 'PricingPriceListSerializer'  # Unique ref_name for pricing


# Сериализатор для модели Discount
class DiscountSerializer(serializers.ModelSerializer):
    product = ProductSerializer()  # Вложенный сериализатор для связи с продуктом

    class Meta:
        model = Discount
        fields = ['id', 'product', 'discount_percentage', 'start_date', 'end_date', 'description']
        ref_name = 'PricingDiscountSerializer'  # Unique ref_name for pricing


# Сериализатор для модели PriceChangeHistory
class PriceChangeHistorySerializer(serializers.ModelSerializer):
    product = ProductSerializer()  # Вложенный сериализатор для связи с продуктом

    class Meta:
        model = PriceChangeHistory
        fields = ['id', 'product', 'old_price', 'new_price', 'change_date', 'reason']
        ref_name = 'PricingPriceChangeHistorySerializer'  # Unique ref_name for pricing


# Сериализатор для модели PriceTag
class PriceTagSerializer(serializers.ModelSerializer):
    product = ProductSerializer()  # Вложенный сериализатор для связи с продуктом
    price_list = PriceListSerializer()  # Вложенный сериализатор для связи с прайс-листом

    class Meta:
        model = PriceTag
        fields = ['id', 'product', 'price_list', 'tag_image', 'price_effective_date']
        ref_name = 'PricingPriceTagSerializer'  # Unique ref_name for pricing


# Сериализатор для модели DiscountHistory
class DiscountHistorySerializer(serializers.ModelSerializer):
    discount = DiscountSerializer()  # Вложенный сериализатор для связи с акцией

    class Meta:
        model = DiscountHistory
        fields = ['id', 'discount', 'old_discount', 'new_discount', 'change_date', 'reason']
        ref_name = 'PricingDiscountHistorySerializer'  # Unique ref_name for pricing


# Сериализатор для модели PriceListWithDiscount
class PriceListWithDiscountSerializer(serializers.ModelSerializer):
    price_list = PriceListSerializer()  # Вложенный сериализатор для связи с прайс-листом
    discount = DiscountSerializer()  # Вложенный сериализатор для связи с скидкой

    class Meta:
        model = PriceListWithDiscount
        fields = ['id', 'price_list', 'discount', 'final_price_after_discount']
        ref_name = 'PricingPriceListWithDiscountSerializer'  # Unique ref_name for pricing
