from rest_framework import viewsets, status
from rest_framework.response import Response
from apps.calls.serializers import DateRangeSerializer, DailyCallSummarySerializer
from apps.calls.services.daily_calls import DailyCallsService
from apps.calls.models import Call
from apps.companies.models import Company

class DailyCallsViewSet(viewsets.GenericViewSet):

    queryset = Call.objects.all()

    def get_queryset(self):
        user = self.request.user

        if user.is_superuser:
            return self.queryset

        if not user.active_company:
            return Call.objects.none()

        try:
            company = Company.objects.get(id=user.active_company.id)
        except Company.DoesNotExist:
            return Call.objects.none()

        return self.queryset.filter(company=company)

    def list(self, request):
        date_serializer = DateRangeSerializer(data=request.query_params)
        date_serializer.is_valid(raise_exception=True)

        start_date = date_serializer.validated_data["start_date"]
        end_date = date_serializer.validated_data["end_date"]

        qs = self.filter_queryset(self.get_queryset())

        summary = DailyCallsService.get_summary(qs, start_date, end_date, request.user)

        serializer = DailyCallSummarySerializer(summary, many=True)
        return Response({"daily_calls": serializer.data}, status=status.HTTP_200_OK)
