from rest_framework import serializers
from .models import Plan, subscribe
from login_signup.serializers import UserProfileSerializer 
from django.utils import timezone
from product.serializers import OfferModelSerializer
class PlanSerializer(serializers.ModelSerializer):
    class Meta:
        model = Plan
        fields = '__all__'

class SubscribeSerializer(serializers.ModelSerializer):
    user = UserProfileSerializer()
    plan = PlanSerializer()
    class Meta:
        model = subscribe
        fields = '__all__'
        
class SubscribeCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = subscribe
        fields = '__all__'
        read_only_fields = ['created_at', 'expiration_date', 'is_expired']
    
        
    def validate(self, data):
        user = data.get('user')
        print(f"========Subscription=========")
        print(f"Validating subscription for user: {user}")  # Debugging print

        if subscribe.objects.filter(user=user).exists():
            print(f"Validation failed: User {user} already has a subscription.")  # Debugging print
            raise serializers.ValidationError("This user already has a subscription.")
        
        print(f"Validation successful for user: {user}")  # Debugging print
        return data
        # if subscribe.objects.filter(user=user).exists():
        #     raise serializers.ValidationError("This user already has a subscription.")
        
        # return data
    
class SubscribeUpdateSerializer(serializers.ModelSerializer):
    class Meta:
        model = subscribe
        fields = '__all__'
        read_only_fields = ['created_at', 'expiration_date', 'is_expired']
    def update(self, instance, validated_data):
        # Set is_expired to False during update
        instance.is_expired = False
# Update created_at with the current time
        instance.created_at = timezone.now()
        # Perform the update
        instance = super().update(instance, validated_data)
        
        # Save the instance
        instance.save()
        
        return instance
    
class DashboardStatsSerializer(serializers.Serializer):
    # total_products = serializers.IntegerField()
    # total_vendors = serializers.IntegerField()
    # total_buyers = serializers.IntegerField()
    # total_active_products = serializers.IntegerField()
    # total_inactive_products = serializers.IntegerField()
    # total_available_products = serializers.IntegerField()
    # total_out_of_stock_products = serializers.IntegerField()
    # total_categories = serializers.IntegerField()
    # total_reports = serializers.IntegerField()
    # total_offers = serializers.IntegerField()
    total_vendor_status=serializers.JSONField()
    suscription=serializers.JSONField()
    offers=serializers.JSONField()
    category=serializers.JSONField()
    useranalytics=serializers.JSONField()
    total=serializers.JSONField()
    

class UserDashboardStatsSerializer(serializers.Serializer):
    total =serializers.JSONField()
    products=serializers.JSONField(default=list)