import subprocess
import os
import shutil

from github_webhook import Webhook
from flask import Flask
from make_readme import generate_READMEs

app = Flask(__name__)

github_webhook_secret = open("github_webhook_secret", "r").read().strip()
webhook = Webhook(app, endpoint="/github", secret=github_webhook_secret)

login = open("login").read().strip()
token = open("token").read().strip()

my_env = os.environ.copy()
my_env["GIT_TERMINAL_PROMPT"] = "0"
my_env["GIT_AUTHOR_NAME"] = "Yunohost-Bot"
my_env["GIT_AUTHOR_EMAIL"] = "yunohost@yunohost.org"
my_env["GIT_COMMITTER_NAME"] = "Yunohost-Bot"
my_env["GIT_COMMITTER_EMAIL"] = "yunohost@yunohost.org"


def git(cmd, in_folder=None):

    if not isinstance(cmd, list):
        cmd = cmd.split()
    if in_folder:
        cmd = ["-C", in_folder] + cmd
    cmd = ["git"] + cmd
    return subprocess.check_output(cmd, env=my_env).strip().decode("utf-8")


@app.route("/github")
def main_route():
    return "You aren't supposed to go on this page using a browser, it's for webhooks push instead."


@webhook.hook()
def on_push(data):

    repository = data["repository"]["full_name"]
    branch = data["ref"].split("/", 2)[2]

    folder = subprocess.check_output(["mktemp", "-d"]).decode('utf-8').strip()
    try:
        git(["clone", f"https://{login}:{token}@github.com/{repository}", "--single-branch", "--branch", branch, folder])
        generate_READMEs(folder)

        git(["add", "README*.md"], in_folder=folder)

        diff_not_empty = bool(subprocess.check_output(["git", "diff", "HEAD", "--compact-summary"], cwd=folder).strip().decode("utf-8"))
        if not diff_not_empty:
            return

        git(["commit", "-a", "-m", "Auto-update README", "--author='Yunohost-Bot <>'"], in_folder=folder)
        git(["push", "origin", branch, "--quiet"], in_folder=folder)
    finally:
        if os.path.exists(folder):
            shutil.rmtree(folder)

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8123)