import logging

from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpResponse, JsonResponse
from rest_framework.parsers import FormParser
from rest_framework.views import APIView

from core.lib.threshold import annotate_online, get_chans, get_users

logger = logging.getLogger(__name__)


class ThresholdChans(LoginRequiredMixin, APIView):
    parser_classes = [FormParser]
    plan_name = "drilldown"

    def post(self, request):
        if not request.user.has_plan(self.plan_name):
            return JsonResponse({"success": False})
        if "net" not in request.data:
            return JsonResponse({"success": False})
        if "query" not in request.data:
            return JsonResponse({"success": False})
        net = request.data["net"]
        query = request.data["query"]
        channels = get_chans(net, [query])
        if not channels:
            return HttpResponse("")
        channels_human = ", ".join(channels)
        return HttpResponse(channels_human)


class ThresholdUsers(LoginRequiredMixin, APIView):
    parser_classes = [FormParser]
    plan_name = "drilldown"

    def post(self, request):
        if not request.user.has_plan(self.plan_name):
            return JsonResponse({"success": False})
        if "net" not in request.data:
            return JsonResponse({"success": False})
        if "query" not in request.data:
            return JsonResponse({"success": False})
        net = request.data["net"]
        query = request.data["query"]
        users = get_users(net, [query])
        if not users:
            return HttpResponse("")
        users_human = ", ".join(users)
        return HttpResponse(users_human)


class ThresholdOnline(LoginRequiredMixin, APIView):
    parser_classes = [FormParser]
    plan_name = "drilldown"

    def post(self, request):
        if not request.user.has_plan(self.plan_name):
            return JsonResponse({"success": False})
        if "net" not in request.data:
            return JsonResponse({"success": False})
        if "query" not in request.data:
            return JsonResponse({"success": False})
        net = request.data["net"]
        query = request.data["query"]
        online_info = annotate_online(net, query)
        return JsonResponse(online_info)
