from rest_framework import serializers
from .models import Device
from api.serializers import CustomReadOnlyUserSerializer
from billing.models import Payment  # Import the Payment model


class CreateDeviceSerializer(serializers.ModelSerializer):
    name = serializers.CharField(required=True)
    mac = serializers.CharField(required=True)
    registered = serializers.BooleanField(required=True)

    class Meta:
        model = Device
        fields = [
            "name",
            "mac",
            "registered",
            "blocked_by",
        ]
        depth = 2


class BlockDeviceSerializer(serializers.ModelSerializer):
    blocked = serializers.BooleanField(required=True)
    reason_for_blocking = serializers.CharField(required=True)
    blocked_by = serializers.ChoiceField(
        choices=[("ADMIN", "Admin"), ("PARENT", "Parent")], required=True
    )

    class Meta:
        model = Device
        fields = ["blocked", "reason_for_blocking", "blocked_by"]


class DeviceSerializer(serializers.ModelSerializer):
    pending_payment_id = serializers.SerializerMethodField()

    class Meta:
        model = Device
        fields = "__all__"

    def get_pending_payment_id(self, obj):
        # Query the last unpaid payment for the device
        unpaid_payment = (
            Payment.objects.filter(devices=obj, paid=False)
            .order_by("-created_at")
            .first()
        )
        return unpaid_payment.id if unpaid_payment else None


class ReadOnlyDeviceSerializer(serializers.ModelSerializer):
    user = CustomReadOnlyUserSerializer(read_only=True)

    class Meta:  # type: ignore
        depth = 2
        model = Device
        fields = "__all__"