from rest_framework import serializers


class CityTaxPreviewRequestSerializer(serializers.Serializer):
    period = serializers.DictField()
    rates = serializers.DictField(
        child=serializers.DecimalField(max_digits=6, decimal_places=2)
    )
    property_type_id = serializers.IntegerField(required=False, min_value=1)
    property_id = serializers.IntegerField(required=False, min_value=1)

    def validate_period(self, value):
        required = {"from_month", "to_month", "year"}
        if not required.issubset(value.keys()):
            raise serializers.ValidationError("Period must include from month, to month or year")

        if not 1 <= value["from_month"] <= 12:
            raise serializers.ValidationError("from_month must be 1–12")

        if not 1 <= value["to_month"] <= 12:
            raise serializers.ValidationError("to_month must be 1–12")

        if value["from_month"] > value["to_month"]:
            raise serializers.ValidationError("from_month cannot exceed to_month")

        return value
