# from apps.authentication.api.v1.serializers.serializer import UserSerializer
# from rest_framework.pagination import LimitOffsetPagination
# from rest_framework.viewsets import ModelViewSet, ViewSet
# from apps.authentication.document import UserDocument
# from rest_framework.response import Response
# from django.http.response import HttpResponse
# from apps.authentication.models import User
# from rest_framework.views import APIView
# from elasticsearch_dsl.query import Q
# import abc
#
#
# class PaginatedElasticSearchApiView(APIView, LimitOffsetPagination):
#     """Base ApiView Class for elasticsearch views with pagination,
#     Other ApiView classes should inherit from this class"""
#     serializer_class = None
#     document_class = None
#
#     @abc.abstractmethod
#     def generate_q_expression(self, query):
#         """This method should be overridden
#         and return a Q() expression."""
#
#     def get(self, request, query):
#         try:
#             q = self.generate_q_expression(query)
#             filter = self.document_class.filter().query(q)
#             response = filter.execute()
#
#             print(f"Found {response.hits.total.value} hit(s) for query: '{query}'")
#
#             results = self.paginate_queryset(response, request, view=self)  # noqa
#             serializer = self.serializer_class(results, many=True)
#             return self.get_paginated_response(serializer.data)
#         except Exception as e:
#             return HttpResponse(e, status=500)
#
#
# class SearchUsersApiView(PaginatedElasticSearchApiView):  # noqa
#     """Search in Users"""
#
#     serializer_class = UserSerializer
#     document_class = UserDocument
#
#     def generate_q_expression(self, query):
#         return Q(
#             'multi_match',
#             query=query,
#             fields=[
#                 'username',
#                 'mobile'
#             ], fuzziness='auto'
#         )
