from flask import Flask, render_template, request, redirect, url_for, \
    make_response, Markup
from enum import Enum
from bs4 import BeautifulSoup

app = Flask('ui', static_url_path="/static")
app.config['TEMPLATES_AUTO_RELOAD'] = True


class Status(Enum):
    ERREUR_LIEN = "Le lien doit ĂȘtre en http ou https !"
    BON = "Lien ajouté !"


def ecritureFichierHtml(nouvLien, cheminFichier):
    with open(cheminFichier, 'r+') as file:
        soup = BeautifulSoup(file, 'html.parser')
        soup.find("div", {'id': 'liens'}).append(nouvLien)
        file.seek(0)
        file.write(soup.prettify())


@app.route('/')
def slash():
    response = make_response(render_template("index.html"))
    response.headers["Content-Security-Policy"] = "default-src 'self'"
    return response


@app.route("/ajout")
def ajout():
    return render_template("ajout.html")


@app.route("/apropos")
def apropos():
    return render_template("apropos.html")


@app.route("/bizutage", methods=["GET"])
def bizutage_redirect():
    return redirect('/')


@app.route("/bizutage", methods=["POST"])
def bizutage():
    if request.method == "POST":
        lien = request.values['lien'].lower()
        if not (lien.startswith("http") or lien.startswith("https")):
            return render_template(
                "ajout.html",
                erreur=Status.ERREUR_LIEN.value
            )

        titre = Markup.escape(request.values['titre'])
        desc = Markup.escape(request.values['desc'])

        nouvLien = f"""
<div class="elem">
    <h2>{titre}</h2>
    <p><a href="{lien}">Lien</a></p>
    <hr>
    <p>{desc}</p>
</div>"""
        nouvLienHtml = BeautifulSoup(nouvLien, "html.parser") \
            .find("div", {"class": "elem"})
        ecritureFichierHtml(nouvLienHtml, "templates/index.html")

    else:
        print("error")
    return render_template("ajout.html", reussi=Status.BON.value)


if __name__ == "__main__":
    app.run(debug=True)