# from module_one.app import app


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


import os
from pathlib import Path
import json
import ast
from export_to_pdf import export_to_pdf
from BoondManager import boondManager
from formatting_data2 import (
    extract_data_db,
    save_html,
    fill_auto_html,
    find_good_object,
)

from flask import (
    Flask,
    request,
    render_template,
    jsonify,
    url_for,
    make_response,
    redirect,
)


os.environ["APP_CODE"] = "APP1765"


base_path = str(Path.cwd())
template_dir = os.path.join(os.getcwd(), "templates")
static_dir = os.path.join(os.getcwd(), "static")
app = Flask(__name__)  # , template_folder = template_dir,  static_folder=static_dir)

#Fonction qui transforme une date du format 2024-12-02T17:00:00+0100 en 02/12/2024
def format_date(date):
    date = date.split("T")
    date = date[0].split("-")
    date = date[2] + "/" + date[1] + "/" + date[0]
    return date

@app.route("/install", methods=["GET", "POST"])
def bound():
    """redirection vers noond manager"""

    print(os.environ["APP_CODE"])
    popo = request.form
    d = list(popo.lists())
    signedRequest = d[0][1][0]

    boondmanager = boondManager()
    try:
        data = boondmanager.signedRequestDecode(signedRequest)
    except NoneType:
        pass

    print("Status: 302")
    print("Content-Type: application/json")
    print()
    try:
        if (not isinstance(data, int)) and data["installationCode"] is not None:
            # sys.exit(str({'result' : True}))
            return jsonify({"result": True})
        elif (
            (not isinstance(data, int))
            and data["appToken"] is not None
            and data["clientToken"] is not None
            and data["clientName"] is not None
        ):
            print(data["appToken"])
            # sys.exit(str({'result' : True}))
            return jsonify({"result": True})
        else:
            # sys.exit(str({'result' : False}))
            return jsonify({"result": False})
    except KeyError:
        if (
            (not isinstance(data, int))
            and data["appToken"] is not None
            and data["clientToken"] is not None
            and data["clientName"] is not None
        ):
            print(data["appToken"])
            return jsonify({"result": True})
        else:
            return jsonify({"result": False})


@app.route("/", methods=["GET", "POST"])
def home():
    signedRequest = request.args.get("signedRequest")
    boondmanager = boondManager()
    try:
        data = boondmanager.signedRequestDecode(signedRequest)
        os.environ["UserToken"] = data["userToken"]
        boondmanager.setUserToken(os.environ["UserToken"])
    except:
        pass

    fromID = request.args.get("fromId")
    url_path = "application/dictionary"
    candidat = boondmanager.callApi("candidates/" + fromID + "/information")
    actions=boondmanager.callApi("candidates/" + fromID + "/actions")
    actions_id_list = []
    for action in actions["data"]:
        if action["attributes"]["typeOf"] == 12:
            actions_id_list.append((action["id"], format_date(action["attributes"]["startDate"]), action["attributes"]["text"]))
    
    nom_candidat = candidat["data"]["attributes"]["lastName"].upper()
    prenom_candidat = candidat["data"]["attributes"]["firstName"]
    type_candidat = candidat["data"]["attributes"]["typeOf"]
    data_activityArea = fill_auto_html("activityArea", url_path)
    data_mobilityArea = fill_auto_html("mobilityArea", url_path)
    data_availability = fill_auto_html("availability", url_path)
    data_experience = fill_auto_html("experience", url_path)
    data_training = fill_auto_html("training", url_path)
    data_state = fill_auto_html("state", url_path)
    data_criteria = fill_auto_html("criteria", url_path)
    data_nationality = fill_auto_html("nationality", url_path)
    data_expertiseArea = fill_auto_html("expertiseArea", url_path)
    return render_template(
        "index_full_pages.html",
        type_candidat=type_candidat,
        data_activityArea=data_activityArea,
        data_criteria=data_criteria,
        data_nationality=data_nationality,
        data_mobilityArea=data_mobilityArea,
        data_availability=data_availability,
        data_training=data_training,
        data_experience=data_experience,
        data_state=data_state,
        data_expertiseArea=data_expertiseArea,
        userToken=os.environ["UserToken"],
        fromID=fromID,
        nom_candidat=nom_candidat,
        prenom_candidat=prenom_candidat,
        actions=actions_id_list,
    )


@app.route("/get_language", methods=["POST"])
def language():
    data2 = dict(request.get_json())
    usertoken = data2["usertoken"]
    boondmanager = boondManager()
    boondmanager.setUserToken(usertoken)
    option_mobility = boondmanager.callApi("application/dictionary")
    result = option_mobility["data"]["setting"]["languageSpoken"]
    return jsonify(result)


@app.route("/get_language_level", methods=["POST"])
def language_level():
    data2 = dict(request.get_json())
    usertoken = data2["usertoken"]
    boondmanager = boondManager()
    boondmanager.setUserToken(usertoken)
    option_mobility = boondmanager.callApi("application/dictionary")
    result = option_mobility["data"]["setting"]["languageLevel"]
    return jsonify(result)


@app.route("/submit_form_one", methods=["POST"])
def submit_form_one():
    """this function allows to submit form one"""
    data2 = json.loads(request.data)
    # Convert immutable dict to mutable dict
    fromid = data2["fromId"]
    boondmanager = boondManager()
    boondmanager.setUserToken(data2["userToken"])
    os.environ["UserToken"] = data2["userToken"]
    url_path = "application/dictionary"
    actions = data2["actions"]
    expertise_area = data2["expertise"]
    technical_data = data2["technical"]
    activity_area = data2["activity"]
    informations = data2["informations"]
    administrative = data2["administrative"]
    id_entretien = data2["id_entretien"]
    # Create a log file with the name fromid_jj_mm.log
    log_filename = f"{fromid}.log"
    log_filepath = "/var/www/dossier_candidat/app/logs/" + log_filename
    
    # Write data2 to the log file
    with open(log_filepath, 'w') as log_file:
        json.dump(data2, log_file, indent=4)
    if expertise_area != []:
        boondmanager.putApi(
            f"candidates/{fromid}/technical-data",
            activity_area,
            "activity_area",
            fromid,
        )
        boondmanager.putApi(
            f"candidates/{fromid}/technical-data",
            expertise_area,
            "expertise_area",
            fromid,
        )
    boondmanager.putApi(
        f"candidates/{fromid}/technical-data", technical_data, "technical_data", fromid
    )
    boondmanager.putApi(
        f"candidates/{fromid}/information", informations, "informations", fromid
    )
    boondmanager.putApi(
        f"candidates/{fromid}/administrative", administrative, "administrative", fromid
    )
    data_availability = fill_auto_html("availability", url_path)
    try:
        informations["Disponibilité"] = data_availability[
            int(informations["Disponibilité"])
        ]
    except:
        pass
    list_domaines = fill_auto_html("activityArea", url_path)
    try:
        activity_area = activity_area.split(",")
        i = 0
        for domaine in activity_area:
            for main_activity in list_domaines.keys():
                for sub_activity in list_domaines[main_activity]:
                    if domaine == sub_activity[0]:
                        activity_area[i] = sub_activity[1]
                        break
            i = i + 1
        activity_area = ",".join(activity_area)
    except:
        pass
    list_mobilite = fill_auto_html("mobilityArea", url_path)
    mobilities = [""]
    for mobilite in informations["Mobilité"]:
        for main_mobility in list_mobilite.keys():
            for sub_mobility in list_mobilite[main_mobility]:
                if mobilite == sub_mobility[0]:
                    mobilities.append(sub_mobility[1])
                    break
    informations["Mobilité"] = ",".join(mobilities)
    informations["Mobilité"] = informations["Mobilité"][1:]
    list_expertise = fill_auto_html("expertiseArea", url_path)
    try:
        expertise_area = expertise_area.split(",")
        for expertise in expertise_area:
            expertise_area[expertise_area.index(expertise)] = list_expertise[expertise]
        expertise_area = ",".join(expertise_area)
    except:
        pass
    list_decision = fill_auto_html("state", url_path)
    try:
        informations["Décision"] = list_decision[int(informations["Décision"])]
    except:
        pass
    if informations["Statut souhaité"] == "1":
        informations["Statut souhaité"] = "Freelance"
    else:
        informations["Statut souhaité"] = "Salarié"
    actions["Suite Candidature"] = informations["Décision"]
    boondmanager.putApi(f"actions/{id_entretien}", actions, "actions", fromid)
    document = export_to_pdf.generate_word(
        actions,
        expertise_area,
        technical_data,
        activity_area,
        informations,
        administrative,
    )

    if document is True:
        nom_document = (
            "Dossier candidat_"
            + informations["Nom"]
            + " "
            + informations["Prénom"]
            + ".docx"
        )
        nom_document = nom_document.encode("ascii", "ignore")
        boondmanager.postApi(f"documents", nom_document, "documents", fromid)
    return "le document a bien été soumis merci :)"


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