from rest_framework import serializers
from .models import AyurvedaVendorListing, Booking, Category, Deal, NavigationItem, Page, PageSection, SiteSettings, SupportRequest, TrustBenefit, WebsiteImage


class CategorySerializer(serializers.ModelSerializer):
    display_image = serializers.SerializerMethodField()
    class Meta:
        model = Category
        fields = '__all__'
    def get_display_image(self, obj):
        return self.context['request'].build_absolute_uri(obj.image.url) if obj.image else obj.image_url


class DealSerializer(serializers.ModelSerializer):
    category = CategorySerializer(read_only=True)
    discount_percent = serializers.IntegerField(read_only=True)
    display_image = serializers.SerializerMethodField()

    class Meta:
        model = Deal
        fields = '__all__'
    def get_display_image(self, obj):
        return self.context['request'].build_absolute_uri(obj.image.url) if obj.image else obj.image_url


class BookingSerializer(serializers.ModelSerializer):
    class Meta:
        model = Booking
        fields = '__all__'
        read_only_fields = ('status', 'created_at')


class SupportRequestSerializer(serializers.ModelSerializer):
    class Meta:
        model = SupportRequest
        fields = ('id', 'name', 'email', 'message', 'created_at')
        read_only_fields = ('id', 'created_at')


class PageSectionSerializer(serializers.ModelSerializer):
    class Meta:
        model = PageSection
        fields = '__all__'


class PageSerializer(serializers.ModelSerializer):
    sections = serializers.SerializerMethodField()

    class Meta:
        model = Page
        fields = '__all__'

    def get_sections(self, obj):
        return PageSectionSerializer(obj.sections.filter(active=True), many=True).data


class SiteSettingsSerializer(serializers.ModelSerializer):
    display_logo = serializers.SerializerMethodField()
    display_offer_image = serializers.SerializerMethodField()
    class Meta:
        model = SiteSettings
        fields = '__all__'
    def get_display_logo(self, obj):
        return self.context['request'].build_absolute_uri(obj.logo.url) if obj.logo else obj.logo_url
    def get_display_offer_image(self, obj):
        return self.context['request'].build_absolute_uri(obj.offer_image.url) if obj.offer_image else ''


class TrustBenefitSerializer(serializers.ModelSerializer):
    display_image = serializers.SerializerMethodField()
    class Meta:
        model = TrustBenefit
        fields = '__all__'
    def get_display_image(self, obj):
        return self.context['request'].build_absolute_uri(obj.image.url) if obj.image else obj.image_url


class WebsiteImageSerializer(serializers.ModelSerializer):
    display_image = serializers.SerializerMethodField()

    class Meta:
        model = WebsiteImage
        fields = ('id', 'page_path', 'label', 'original_path', 'display_image', 'active', 'updated_at')

    def get_display_image(self, obj):
        if obj.replacement_image:
            return self.context['request'].build_absolute_uri(obj.replacement_image.url)
        return obj.replacement_url


class AyurvedaVendorListingSerializer(serializers.ModelSerializer):
    display_image = serializers.SerializerMethodField(read_only=True)
    is_sponsored = serializers.BooleanField(read_only=True)
    class Meta:
        model = AyurvedaVendorListing
        fields = ('id', 'company_name', 'category', 'contact_name', 'email', 'phone', 'city', 'listing_type', 'title', 'description', 'price', 'original_price', 'image', 'image_url', 'display_image', 'quality_rating', 'review_count', 'status', 'is_sponsored', 'created_at')
        read_only_fields = ('quality_rating', 'review_count', 'status', 'created_at')
        extra_kwargs = {'email': {'write_only': True}, 'phone': {'write_only': True}, 'contact_name': {'write_only': True}, 'image': {'write_only': True}}
    def get_display_image(self, obj):
        return self.context['request'].build_absolute_uri(obj.image.url) if obj.image else obj.image_url


class NavigationItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = NavigationItem
        fields = '__all__'
