#!/usr/bin/env python

from __future__ import print_function

import json
import tempfile

import git
from flask import Flask, request
from pid import PidFile
import sarge
from systemd.journal import JournalHandler
from twisted.internet import reactor
from twisted.web.server import Site
from twisted.web.wsgi import WSGIResource


DESTINATION = "/var/www/dennogumi-test/"
REPO = "dennogumi.org"

app = Flask(__name__)

@app.route("/", methods=["POST"])
def push_hook_to_server():

    app.logger.info("New data received. Processing...")

    data = json.loads(request.data)

    repository = data["repository"]
    if repository["name"] != REPO:
        app.logger.warning("Repository not found.")
        return "OK"

    repo_url = repository["url"]
    temp = tempfile.mkdtemp()
    app.logger.info("Cloning repository...")
    git.Repo.clone_from(repo_url, temp)

    cmd = "/usr/bin/jekyll_clone_repo.sh {0} {1}"
    cmd = sarge.shell_format(cmd, temp, DESTINATION)
    app.logger.info("Deploying Jekyll...")
    pid = sarge.run(cmd, async=True)

    return "OK"

if __name__ == "__main__":

    resource = WSGIResource(reactor, reactor.getThreadPool(), app)
    site = Site(resource)

    reactor.listenTCP(5000, site, interface="127.0.0.1")
    reactor.run()