import re
import json
from nonebot.adapters.cqhttp import Bot, MessageEvent

from ATRI.service import Service as sv
from ATRI.utils.request import get_bytes
from ATRI.exceptions import RequestError


URL = "https://api.github.com/repos/{owner}/{repo}/issues/{issue_number}"


github_issues = sv.on_message()


@github_issues.handle()
async def _github_issues(bot: Bot, event: MessageEvent) -> None:
    msg = str(event.message)
    patt = r"https://github.com/(.*)/(.*)/issues/(.*)"
    need_info = re.findall(patt, msg)
    if not need_info:
        return

    for i in need_info:
        need_info = list(i)
        owner = need_info[0]
        repo = need_info[1]
        issue_number = need_info[2]
        url = URL.format(owner=owner, repo=repo, issue_number=issue_number)

        try:
            data = await get_bytes(url)
        except RequestError:
            return

        data = json.loads(data)
        msg0 = (
            f"{repo}: #{issue_number} {data['state']}\n"
            f"comments: {data['comments']}\n"
            f"update: {data['updated_at']}\n"
            f"{data['body']}"
        )
        await github_issues.finish(msg0)