import logging
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import viewsets
from rest_framework.filters import SearchFilter, OrderingFilter
from rest_framework.permissions import IsAuthenticated
from apps.companies.models import Company
from apps.calls.constants import BotType
from apps.calls.filters import CallFilter
from apps.calls.models import Call
from apps.calls.pagination import CallLimitOffsetPagination
from apps.calls.serializers import CallDetailSerializer


logger = logging.getLogger(__name__)


class AdvisorCallViewSet(viewsets.ReadOnlyModelViewSet):
    serializer_class = CallDetailSerializer
    queryset = Call.objects.all()
    permission_classes = [IsAuthenticated]
    pagination_class = CallLimitOffsetPagination
    filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
    filterset_class = CallFilter
    search_fields = ['from_number', 'to_number', 'transcript', 'summary']
    ordering_fields = ['created_at', 'duration', 'cost']
    ordering = ['-created_at']

    def get_queryset(self):
        if hasattr(self, '_cached_qs'):
            return self._cached_qs
        
        user = self.request.user
        if not user.active_company:
            self._cached_qs = Call.objects.none()
            return self._cached_qs
        
        company = Company.objects.filter(phone=user.active_company.phone).first()
        if not company:
            self._cached_qs = Call.objects.none()
            return self._cached_qs

        self._cached_qs = Call.objects.filter(
            company=company,
            transfer_user=user,
            bot_type=BotType.SERVICE_BOT.value
        ).order_by('-id')

        return self._cached_qs
