from rest_framework.views import APIView
from rest_framework.response import Response

from core.utils.helper import timedelta_to_custom_format

from django.db.models import Sum, Value, DurationField, ExpressionWrapper
from django.db.models.functions import Coalesce

from apps.employee.models import Activity

from apps.employee.serializers.dashboard_serializers import DashboardActivitySerializer

from datetime import date



class DashboardAPIView(APIView):
    def get(self, request, format=None):

        activity_queryset = Activity.objects.filter(user=self.request.user, start_date_time__date=date.today()).select_related('user','project','activity_type').order_by('-start_date_time')

        total_duration = activity_queryset.aggregate(
            total_duration=Coalesce(Sum('total_duration', output_field=DurationField()), ExpressionWrapper(Value('00:00:00'), output_field=DurationField()))
        )

        activities = DashboardActivitySerializer(activity_queryset, many=True).data

        return Response({
            'total_duration': timedelta_to_custom_format(total_duration['total_duration']),
            'activities': activities
        })
