import json

from django.contrib.auth.models import User
from django.db.models import Q
from django.forms.models import model_to_dict
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView

from even_table.models import Dept, Jobs, Dept2Jobs


# Create your views here.
# 部门增删查改
class deptView(APIView):
    """
    request {name名字},parent_id{父级id,可空}
    创建一个节点
    """

    def post(self, request):
        data = request.data
        res = []
        if 'parent_id' in data:
            # try:
            # 创建部门表,返回创建数据成功
            # print(data['parent_id'])
            # print(model_to_dict(Dept.objects.get(id=data['parent_id'])))
            res = Dept.objects.create(
                name=data['name'],
                parent_id=data['parent_id']
            )
            res = model_to_dict(res)
            res = {'node': res, 'message': data['name'] + ' 新增叶子成功'}
            return Response(data=res, status=status.HTTP_200_OK)
        # except Exception:
        #     print(json.dump(Exception))
        #     return Response(data={"message": '错误'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

        else:
            # try:
            res = Dept.objects.create(
                name=data['name'],
            )
            res = model_to_dict(res)
            res = {'node': res, 'message': data['name'] + ' 新增父级成功'}
            return Response(data=res, status=status.HTTP_200_OK)
        # except Exception:
        #     return Response(data={"message": '错误'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

    """
    得到节点
    request{parent_id(节点id,可空)}
    """

    def get(self, request):
        data = request.GET
        res = []
        if 'parent_id' in data:
            # 给parent_id 拿到子集
            res = Dept.objects.filter(parent_id=data['parent_id']).values().all()
        else:
            # 没有传name 则给第0层
            res = Dept.objects.filter(parent_id=None).values().all()
        return Response(data=res, status=status.HTTP_200_OK)

    """
    删除节点
    {id:节点id}
    """

    def delete(self, request):
        data = request.data
        # 部门 删除这个部门
        res = Dept.objects.filter(id=data['id']).delete()

        # 岗位 删除这个部门下面的所有岗位
        # Jobs.objects.filter()
        # Dept2Jobs.objects.filter(dept_id=data['id'])

        # 关联表 删除跟这个部门关联的
        Dept2Jobs.objects.filter(dept_id=data['id']).delete()

        return Response(data="删除成功", status=status.HTTP_200_OK)

    """
    更新节点
    {id:节点id,name:节点名字,parent_id:父节点id(可空)}
    """

    def put(self, request):
        data = request.data
        if 'parent_id' in data:
            res = Dept.objects.filter(id=data['id']).update(name=data['name'], parent_id=data['parent_id'])
        else:
            res = Dept.objects.filter(id=data['id']).update(name=data['name'])

        return Response(data=res, status=status.HTTP_200_OK)


# 岗位增删查改
class jobsView(APIView):
    # 增 {name:岗位名字,dept_id:父级部门id}
    def post(self, request):
        data = request.data
        # 创建岗位
        res = Jobs.objects.create(
            name=data['name']
        )
        res = model_to_dict(res)
        if res:
            # 创建关联
            Dept2Jobs.objects.create(
                dept_id=data['dept_id'],
                job_id=res['id']
            )

        return Response(data={'result': res, 'message': '创建岗位成功'}, status=status.HTTP_200_OK)

    # 查 {dept_id:父级部门id(可空,空则查全部)}
    def get(self, request):
        # 从关联表里 查到 这个父级的id下的所有岗位id 查到job下面的所有name
        names = Dept2Jobs.objects.filter(dept=request.GET['dept_id']).values("job", "job__name")
        # print(ids)
        return Response(data={'result': names, 'message': '查询成功'}, status=status.HTTP_200_OK)

    # 更新 {id:岗位id,name:岗位新名字}
    def put(self, request):
        pass

    # 删 {id:岗位id}
    def delete(self, request):
        # 删除关联表数据
        data = request.data
        Dept2Jobs.objects.filter(job_id=data['id']).delete()
        # 删除岗位
        Jobs.objects.filter(id=data['id']).delete()
        return Response(data={'message': data['id'] + '删除成功'}, status=status.HTTP_200_OK)


# 用户增删查改
class userView(APIView):
    def post(self, request):
        pass

    # 用户查询
    def get(self, request):
        data = request.GET
        res = User.objects.values('id', 'username', 'email')
        return Response(data={'result': res, 'message': '查询所有用户基础数据'}, status=status.HTTP_200_OK)

    def put(self, request):
        pass

    def delete(self, request):
        pass