from rest_framework import serializers
from apps.employee.models import TimeSheet
from datetime import date



class ClockInSerializer(serializers.ModelSerializer):
    class Meta:
        model = TimeSheet
        fields = ('id', 'user', 'clock_in_date_time',)
        read_only_fields = ('id', 'user', 'clock_in_date_time',)

    def validate(self, attrs):

        last_entry = self.Meta.model.objects.filter(
            user = self.context['user'], clock_in_date_time__date=date.today(),
            clock_out_date_time__isnull=True
        ).order_by('-clock_in_date_time').first()

        if last_entry:
            raise serializers.ValidationError({"already_clocked_in": "Already clocked in for today."})

        return super().validate(attrs)


class ClockOutSerializer(serializers.ModelSerializer):
    class Meta:
        model = TimeSheet
        fields = ('id', 'user', 'clock_out_date_time',)
        read_only_fields = ('id', 'user', 'clock_out_date_time',)

    def validate(self, attrs):
        time_sheet = self.Meta.model.objects.filter(user=self.context['user'],\
                clock_in_date_time__date=date.today(),clock_out_date_time__isnull=True\
                ).order_by('-clock_in_date_time').first()

        if not time_sheet:
            raise serializers.ValidationError({'not_clocked_in': "You are not clocked in for today."})

        if time_sheet.clock_out_date_time:
            raise serializers.ValidationError({'already_clocked_out': "You are already clocked out for today."})

        attrs['id'] = time_sheet.id
        attrs['user'] = self.context['user']

        return attrs
