from rest_framework import serializers
from apps.companies.services import CompanyUserService
from apps.companies.serializers import CompanyUserSimpleSerializer


class CallSettingsSerializer(serializers.Serializer):
    bdc_number = serializers.CharField()
    default_transfer_staff = serializers.SerializerMethodField()
    missing_call_notify_to_details = serializers.SerializerMethodField()
    # all_service_managers = serializers.SerializerMethodField()
    # all_users = serializers.SerializerMethodField()

    def get_default_transfer_staff(self, company):
        """
        Return default transfer staff with role
        """
        staff = company.default_transfer_staff
        if not staff:
            return None

        request = self.context["request"]

        qs = CompanyUserService.list_company_users(
            user=request.user
        ).filter(user_pk=staff.id)

        return CompanyUserSimpleSerializer(qs.first()).data if qs.exists() else None

    def get_missing_call_notify_to_details(self, company):
        """
        Return notify users with role
        """
        request = self.context["request"]
        notify_ids = company.missing_call_notify_to.values_list("id", flat=True)

        qs = CompanyUserService.list_company_users(
            user=request.user
        ).filter(user_pk__in=notify_ids)

        return CompanyUserSimpleSerializer(qs, many=True).data

    # def get_all_service_managers(self, company):
    #     request = self.context["request"]
    #     qs = CompanyUserService.list_company_users(
    #         user=request.user,
    #         role_param="Service Manager"
    #     )
    #     return CompanyUserSimpleSerializer(qs, many=True).data
    #
    # def get_all_users(self, company):
    #     request = self.context["request"]
    #     qs = CompanyUserService.list_company_users(
    #         user=request.user
    #     )
    #     return CompanyUserSimpleSerializer(qs, many=True).data
