# -*- coding:utf-8 -*-
'''
@Author:Robin
@Email: 329080237@qq.com
@Wechat: 15618110227
@File: issues.py
@Date: 2021/9/28 20:33
@Description:
'''
from utils.public import *
from .base import RequestGit
import json

def getIssues(request, owner, repo):
    data = json.loads(request.GET.get("data"))
    query = data.get("query")
    payload = {}
    if query:
        payload = {
            "page": query.get("pageNo", 1),
            "limit": query.get("pageSize", 10),
            "q": query.get("q"),
            "state": query.get("state"),
            "labels": query.get("labels")
        }
        console(payload)
    api = "/repos/{}/{}/issues".format(owner, repo)
    res = RequestGit(request, api).get(query=payload)
    if res.status_code == 200:
        items = json.loads(res.text)
        total = res.headers['x-total-count']
    else:
        print(res.text)
        raise Exception("获取issues列表信息失败!")

    resData = {
        "items": items,
        "total": int(total)
    }
    #console(resData)
    return jsonData(data=resData)

def issueDetail(request, owner, repo, id):
    api = '/repos/{}/{}/issues/{}'.format(owner, repo, id)
    res = RequestGit(request, api).get()
    if res.status_code == 200:
        items = json.loads(res.text)
    else:
        print(res.text)
        raise Exception("获取issues详情失败!")

    # console(resData)
    return jsonData(data=items)

def createIssue(request, owner, repo):
    data = json.loads(request.body)
    payload = {
        "title": data.get("title"),
        "body": data.get("body")
    }
    print(payload)
    api = "/repos/{}/{}/issues".format(owner, repo)
    res = RequestGit(request, api).post(payload=payload)
    if res.status_code == 201:
        print('创建issue成功!')
    else:
        print(res.text)
        raise Exception("创建issues失败!")

    # console(resData)
    return jsonData()

def updateIssue(request, owner, repo, id):
    data = json.loads(request.body)
    payload = {
        "assignees": data.get("assignees")
    }

    print(payload)
    api = "/repos/{}/{}/issues/{}".format(owner, repo, id)
    res = RequestGit(request, api).patch(payload=payload)
    if res.status_code == 201:
        print('指派成员成功!')
    else:
        print(res.text)
        raise Exception("指派成员失败!")

    # console(resData)
    return jsonData()

def getIssuesClosedTotal(request, owner, repo):
    payload = {
        "state": "closed"
    }
    api = "/repos/{}/{}/issues".format(owner, repo)
    res = RequestGit(request, api).get(query=payload)
    if res.status_code == 200:
        total = res.headers['x-total-count']
    else:
        print(res.text)
        raise Exception("获取issues 关闭数失败!")

    resData = {
        "total": int(total)
    }
    # console(resData)
    return jsonData(data=resData)


def getRepoLabels(request, owner, repo):
    api = "/repos/{}/{}/labels".format(owner, repo)
    res = RequestGit(request, api).get()
    if res.status_code == 200:
        items = json.loads(res.text)
    else:
        print(res.text)
        raise Exception("获取issues 关闭数失败!")

    resData = {
        "items": items,
        "total": len(items)
    }
    # console(resData)
    return jsonData(data=resData)


def getCollaborators(request, owner, repo):
    api = "/repos/{}/{}/collaborators".format(owner, repo)
    res = RequestGit(request, api).get(token=True)
    if res.status_code == 200:
        items = json.loads(res.text)
    else:
        print(res.text)
        raise Exception("获取issues 关闭数失败!")

    resData = {
        "items": items,
        "total": len(items)
    }
    # console(resData)
    return jsonData(data=resData)

def createRepoLabel(request, owner, repo):
    data = json.loads(request.body)
    api = "/repos/{}/{}/labels".format(owner, repo)
    res = RequestGit(request, api).post(token=True, payload=data)

    if res.status_code == 201:
        items = json.loads(res.text)
    else:
        print(res.text)
        raise Exception("创建标签失败!")

    return jsonData()


def delRepoLabel(request, owner, repo, id):
    api = "/repos/{}/{}/labels/{}".format(owner, repo, id)
    res = RequestGit(request, api).delete(token=True)
    print(res)
    if res.status_code == 204:
        print('删除成功!')
    else:
        print(res.text)
        raise Exception("删除标签失败!")

    return jsonData()

def updateRepoLabel(request, owner, repo, id):
    api = "/repos/{}/{}/labels/{}".format(owner, repo, id)
    payload = json.loads(request.body)
    res = RequestGit(request, api).patch(token=True, payload=payload)
    if res.status_code == 200:
        print('更新成功!')
    else:
        print(res.text)
        raise Exception("修改标签失败!")

    return jsonData()