import nonebot
from git import Repo

from liteyuki.utils.base.config import get_config

remote_urls = [
        "https://github.com/snowykami/LiteyukiBot.git",
        "https://gitee.com/snowykami/LiteyukiBot.git"
]


def detect_update() -> bool:
    # 对每个远程仓库进行检查，只要有一个仓库有更新，就返回True
    for remote_url in remote_urls:
        repo = Repo(".")
        repo.remotes.origin.set_url(remote_url)
        repo.remotes.origin.fetch()
        if repo.head.commit != repo.commit('origin/main'):
            return True


def update_liteyuki() -> tuple[bool, str]:
    """更新轻雪
    :return: 是否更新成功，更新变动"""

    if get_config("allow_update", True):
        new_commit_detected = detect_update()
        if new_commit_detected:
            repo = Repo(".")
            logs = ""
            # 对每个远程仓库进行更新
            for remote_url in remote_urls:
                try:
                    logs += f"\nremote: {remote_url}"
                    repo.remotes.origin.set_url(remote_url)
                    repo.remotes.origin.pull()
                    diffs = repo.head.commit.diff("origin/main")
                    for diff in diffs.iter_change_type('M'):
                        logs += f"\n{diff.a_path}"
                    return True, logs
                except:
                    continue
        else:
            return False, "Nothing Changed"

    else:
        raise PermissionError("Update is not allowed.")
