from flask import Flask, render_template, request, abort, send_from_directory
from dotenv import load_dotenv
from markdown import markdown
from glob import glob
import json
import os
import sys
import time
import shutil

def preprocess_payload(payload):
    for column in payload.get("columns", []):
        md = column.get("markdown")
        if md:
            column["content"] = markdown(md)
        for slide in column.get("slides", []):
            md = slide.get("markdown")
            if md:
                slide["content"] = markdown(md)

load_dotenv()

application = Flask(__name__)

@application.get("/")
def home():
    payload = json.load(open("static/slides.json"))
    preprocess_payload(payload)
    return render_template("slides.html", **payload)

@application.post("/update")
def update():
    shutil.copy(
        "static/slides.json",
        time.strftime(
            "archive/slides-%Y-%m-%d-%H.%M.%S.json",
            time.localtime()))
    payload = request.get_json()
    print(type(payload))
    json.dump(payload, sys.stdout, indent=4)
    json.dump(payload, open("static/slides.json", "w"), indent=4)
    return({"status": "success"})

@application.get("/enum/<topic>")
def choices(topic):
    if topic in ["img", "bg"]:
        return {"type": "string", "enum": glob("static/{}/*.*".format(topic))}
    abort(404)

@application.get("/schema.json")
def schema():
    return render_template("slides.schema.json", backgrounds=choices("bg"))

@application.get("/editor")
def editor():
    return render_template("editor.html")

@application.route("/favicon.ico")
def favicon():
    return send_from_directory(os.path.join(application.root_path, "static"),
                               "favicon.ico", mimetype="image/vnd.microsoft.icon")
