from rest_framework import serializers
from common.serializers import CurrentUserProfileDefault
from . import models


class StaffEventSerializer(serializers.ModelSerializer):
    created_by_name = serializers.SerializerMethodField()
    visitor_number = serializers.SerializerMethodField()

    class Meta:
        model = models.Event
        fields = '__all__'
        read_only_fields = ('created_at', 'update_at', 'created_by')

    def get_created_by_name(self, obj):
        return obj.created_by.full_name

    def get_visitor_number(self, obj):
        return obj.visitors.all().count()

    def validate(self, data):
        if 'absent' in data and 'visitors' in data:
            for i in data['absent']:
                if i in data['visitors']:
                    raise serializers.ValidationError('You cant add a student to absent and visitor in the same time.')
        return data


class StudentEventSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Event
        fields = ('id', 'name', 'date', 'description', )
        read_only_fields = ('id', 'name', 'date', 'description', )


class NoteSerializer(serializers.ModelSerializer):
    created_by = serializers.HiddenField(default=CurrentUserProfileDefault())
    created_by_name = serializers.SerializerMethodField()

    class Meta:
        model = models.Note
        fields = '__all__'
        read_only_fields = ('created_at', 'update_at', 'created_by')

    def get_created_by_name(self, obj):
        return obj.created_by.full_name

    def validate(self, data):
        if data['profile'] is None and data['event'] is None:
            raise serializers.ValidationError('You have to add profile or event')
        return data