from rest_framework import serializers

from .models import (
    BankTransaction,
    Destinataer,
    DestinataerUnterstuetzung,
    Foerderung,
    Land,
    LandVerpachtung,
    Paechter,
    StiftungsKalenderEintrag,
    StiftungsKonto,
    Veranstaltung,
    Veranstaltungsteilnehmer,
    Verwaltungskosten,
)


class DestinataerUnterstuetzungSerializer(serializers.ModelSerializer):
    class Meta:
        model = DestinataerUnterstuetzung
        fields = "__all__"


class DestinataerSerializer(serializers.ModelSerializer):
    unterstuetzungen = DestinataerUnterstuetzungSerializer(many=True, read_only=True)

    class Meta:
        model = Destinataer
        fields = "__all__"


class LandVerpachtungSerializer(serializers.ModelSerializer):
    class Meta:
        model = LandVerpachtung
        fields = "__all__"


class LandSerializer(serializers.ModelSerializer):
    aktive_verpachtungen = serializers.SerializerMethodField()

    class Meta:
        model = Land
        fields = "__all__"

    def get_aktive_verpachtungen(self, obj):
        qs = obj.neue_verpachtungen.filter(status="aktiv")
        return LandVerpachtungSerializer(qs, many=True).data


class PaechterSerializer(serializers.ModelSerializer):
    aktive_verpachtungen = serializers.SerializerMethodField()

    class Meta:
        model = Paechter
        fields = "__all__"

    def get_aktive_verpachtungen(self, obj):
        qs = obj.neue_verpachtungen.filter(status="aktiv")
        return LandVerpachtungSerializer(qs, many=True).data


class FoerderungSerializer(serializers.ModelSerializer):
    class Meta:
        model = Foerderung
        fields = "__all__"


class StiftungsKontoSerializer(serializers.ModelSerializer):
    class Meta:
        model = StiftungsKonto
        fields = "__all__"


class VerwaltungskostenSerializer(serializers.ModelSerializer):
    class Meta:
        model = Verwaltungskosten
        fields = "__all__"


class StiftungsKalenderEintragSerializer(serializers.ModelSerializer):
    class Meta:
        model = StiftungsKalenderEintrag
        fields = "__all__"


class BankTransactionSerializer(serializers.ModelSerializer):
    class Meta:
        model = BankTransaction
        fields = "__all__"


class VeranstaltungsteilnehmerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Veranstaltungsteilnehmer
        fields = "__all__"


class VeranstaltungSerializer(serializers.ModelSerializer):
    teilnehmer = VeranstaltungsteilnehmerSerializer(many=True, read_only=True)
    teilnehmer_count = serializers.IntegerField(
        source="get_teilnehmer_count", read_only=True
    )
    zugesagte_count = serializers.IntegerField(
        source="get_zugesagte_count", read_only=True
    )

    class Meta:
        model = Veranstaltung
        fields = "__all__"
