from rest_framework.generics import CreateAPIView
from rest_framework.response import Response

from datetime import date, datetime

from apps.employee.serializers.clock_in_out_serializers import ClockInSerializer, ClockOutSerializer
from apps.employee.models import TimeSheet



class ClockInAPIView(CreateAPIView):
    serializer_class = ClockInSerializer

    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data, context={'user': self.request.user})
        serializer.is_valid(raise_exception=True)

        serializer.save(user=self.request.user, clock_in_date_time=datetime.now(), created_by=self.request.user)

        return Response(serializer.data)


class ClockOutAPIView(CreateAPIView):
    serializer_class = ClockOutSerializer

    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data, context={'user': self.request.user})
        serializer.is_valid(raise_exception=True)

        time_sheet = TimeSheet.objects.filter(user_id=self.request.user, clock_in_date_time__date=date.today()).first()
        serializer = self.serializer_class(instance=time_sheet, data=request.data, context={'user': self.request.user})
        serializer.is_valid()

        serializer.save(
            clock_out_date_time=datetime.now(),
            total_duration=datetime.now() - time_sheet.clock_in_date_time,
            updated_by=self.request.user
        )

        return Response(serializer.data)