from rest_framework import serializers
from .models import DailyWorkClaim

class DailyWorkClaimSerializer(serializers.ModelSerializer):
    """Serializer for DailyWorkClaim model"""
    user_email = serializers.EmailField(source='profile.user.email', read_only=True)
    user_name = serializers.CharField(source='profile.user.name', read_only=True)
    formatted_date = serializers.SerializerMethodField()
    formatted_claim_date = serializers.SerializerMethodField()
    
    class Meta:
        model = DailyWorkClaim
        fields = [
            'id', 
            'profile', 
            'claimed_at', 
            'claim_date', 
            'reward_amount', 
            'user_email', 
            'user_name',
            'formatted_date',
            'formatted_claim_date'
        ]
        read_only_fields = ['id', 'claimed_at', 'claim_date']
    
    def get_formatted_date(self, obj):
        return obj.claimed_at.strftime("%Y-%m-%d %H:%M:%S")
    
    def get_formatted_claim_date(self, obj):
        return obj.claim_date.strftime("%Y-%m-%d")

class DailyWorkStatusSerializer(serializers.Serializer):
    """Serializer for daily work status"""
    can_claim = serializers.BooleanField()
    next_claim_time = serializers.DateTimeField(allow_null=True)
    next_claim_time_formatted = serializers.SerializerMethodField()
    claimed_today = serializers.BooleanField()
    reward_amount = serializers.DecimalField(max_digits=12, decimal_places=4)
    
    def get_next_claim_time_formatted(self, obj):
        if obj.get('next_claim_time'):
            return obj['next_claim_time'].strftime("%Y-%m-%d %H:%M:%S")
        return None

class DailyWorkHistorySerializer(serializers.Serializer):
    """Serializer for history response"""
    history = DailyWorkClaimSerializer(many=True)
    statistics = serializers.DictField()

# ❌ Remove this serializer - it's causing the problem
# class DailyWorkClaimResponseSerializer(serializers.Serializer):
#     success = serializers.BooleanField()
#     message = serializers.CharField()
#     claim = DailyWorkClaimSerializer()
#     new_balance = serializers.DecimalField(max_digits=12, decimal_places=4)
#     reward_amount = serializers.DecimalField(max_digits=12, decimal_places=4)     