import logging

from django.db.models import Count
from django.shortcuts import render
from django.views.decorators.http import require_http_methods

# Create your views here.
from rest_framework import viewsets
from rest_framework.response import Response
from app.models import TP
from app.serializers import SerialMyModel, SerialFilter
from app.pagination import MyPageNumberPagination
from user.models import UserProfile
from django.contrib.auth import authenticate, login, logout
from .utils import generate_token, decode_token_exp_time
from rest_framework.views import APIView

logger = logging.getLogger('mylogger')


class TPAPIView(APIView):
    def get(self, request, *args, **kwargs):
        query_params = request.query_params
        pass


class ModelQuery(viewsets.ModelViewSet):
    # 查询类
    queryset = TP.objects.all().order_by("-uid")  # 按照uid倒序
    # 序列化类
    serializer_class = SerialMyModel
    # 分页类
    pagination_class = MyPageNumberPagination

    # 条件筛选
    filterset_class = SerialFilter

    def query_event(self, request, *args, **kwargs):
        res = TP.objects.filter(event_type__isnull=False).values('event_type').annotate(count=Count('event_type')).order_by('-count')
        result = list(res)
        data = dict()
        for index, item in enumerate(result, 1):
            data[index] = item.get('event_type')
        response = {
            'success': True,
            'msg': '查询成功',
            'data': data
        }
        return Response(response)

# 用APIVIEW或者视图函数,改到user模块下
class RegisterLoginViewSet(viewsets.ModelViewSet):
    def tp_register(self, request, *args, **kwargs):
        """注册 POST"""
        # 判断用户是否为管理员
        # user = request.user
        # if not user.is_superuser:
        #     return Response({'msg': '您不是管理员,无权限添加成员'})
        data = request.data
        username = data.get('username')
        password = data.get('password')
        try:
            if UserProfile.objects.filter(username=username).first():
                return Response({'msg': '该用户名已存在,请换一个'})
            UserProfile.objects.create_user(username=username, password=password)
            return Response({'msg': '注册成功'})
        except Exception as e:
            logger.info(e)
            response = {
                "msg": f'注册失败, 原因:{e}'
            }
            return Response(response)


class LoginView(viewsets.ModelViewSet):
    def tp_login(self, request, *args, **kwargs):
        """登录 POST"""
        data = request.data
        username = data.get('username')
        password = data.get('password')
        login_user = authenticate(username=username, password=password)
        if login_user and login_user.is_active:
            # 生成token
            token = generate_token(login_user)
            response = {
                'success': True,
                'msg': '登录成功',
                'data': {
                    'username': login_user.username,
                    'roles': ['admin'] if login_user.is_superuser else ['common'],
                    'accessToken': token,
                    'expires': decode_token_exp_time(token)
                }
            }
            return Response(response)
        else:
            response = {
                'success': False,
                'msg': '登录失败',
                'data': {
                    'username': None,
                    'roles': [],
                    'accessToken': None,
                    'expires': None
                }
            }
            return Response(response)

    def tp_logout(self, request, *args, **kwargs):
        """登出 GET"""
        pass