import requests
import os
import json
from base64 import urlsafe_b64encode, urlsafe_b64decode
import codecs


def get_base4(fname):
    import base64

    encoded = base64.b64encode(str.encode(fname))
    encoded
    return encoded.strip().decode("utf-8")


# print(get_base4("yann.obiang+sandbox@otteo-consulting.fr:Yann2022"))


def extract_data_db(data):
    """this function extract data to db otteo"""
    import json
    from werkzeug.datastructures import ImmutableMultiDict

    # data = {}
    data2 = data.to_dict(flat=False)
    return data2


url_path = "https://ui.boondmanager.com/api/application/dictionary"


def fill_auto_html(var_label, url_path):
    from BoondManager import boondManager

    boondmanager = boondManager()
    boondmanager.setUserToken(os.environ["UserToken"])

    """This functtion fill the html file by adding information"""

    dictionnaire_infos = boondmanager.callApi(url_path)
    data_fill_html = {}

    if var_label == "activityArea":
        activityArea_setting_dictionnaire = dictionnaire_infos["data"]["setting"][
            str(var_label)
        ]
        for elements in activityArea_setting_dictionnaire:
            list_of_values = []
            for i in elements["option"]:
                list_of_values.append((i["id"], i["value"]))

                data_fill_html[elements["value"]] = list_of_values

    elif var_label == "nationality":
        nationality_list = dictionnaire_infos["data"][str(var_label)]

        for elements in nationality_list:
            data_fill_html[elements["id"]] = elements["value"]

    elif var_label in ["expertiseArea", "availability"]:
        list_of_secteurs = dictionnaire_infos["data"]["setting"][str(var_label)]
        for elements in list_of_secteurs:
            data_fill_html[elements["id"]] = elements["value"]

    elif var_label == "experience":
        experience_list = dictionnaire_infos["data"]["setting"][str(var_label)]
        for elements in experience_list:
            data_fill_html[elements["id"]] = elements["value"]
    elif var_label == "training":
        training_list = dictionnaire_infos["data"]["setting"][str(var_label)]
        for elements in training_list:
            data_fill_html[elements["id"]] = elements["value"]
    elif var_label == "mobilityArea":
        mobilityArea_setting_dictionnaire = dictionnaire_infos["data"]["setting"][
            str(var_label)
        ]
        for elements in mobilityArea_setting_dictionnaire:
            list_of_values = []
            for i in elements["option"]:
                list_of_values.append((i["id"], i["value"]))
            data_fill_html[elements["value"]] = list_of_values

    elif var_label == "state":
        state = dictionnaire_infos["data"]["setting"][str(var_label)]["candidate"]
        for elements in state:
            if (
                elements["value"] == "Création"
                or elements["value"] == "Bannissement"
                or elements["value"] == "Embauche"
                or elements["value"] == "Embauche RH-Solutions"
                or elements["value"] == "Entretien"
                or elements["value"] == "Standby"
            ):
                pass
            else:
                data_fill_html[elements["id"]] = elements["value"]

    elif var_label == "criteria" or var_label in ["languageSpoken", "languageLevel"]:
        activityArea_setting_dictionnaire = dictionnaire_infos["data"]["setting"][
            str(var_label)
        ]
        list_of_criteria = []
        for elements in activityArea_setting_dictionnaire:
            list_of_values = []
            list_of_criteria.append((elements["id"], elements["value"]))
            for i in dictionnaire_infos["data"]["setting"]["evaluation"]:
                list_of_values.append((i["id"], i["value"]))
            data_fill_html["evaluation"] = list_of_values
        data_fill_html["criteria"] = list_of_criteria

    return data_fill_html


def find_good_object(liste_mobility, key_word):
    """cette fonction trouve le bon objet a partir d'une cle"""

    if isinstance(liste_mobility, list):
        for element in liste_mobility:
            if key_word in list(element.values()):
                return element

        return "mobilityArea doit être une liste"


def save_html(url):
    headers = {
        "Access-Control-Allow-Origin": "*",
        "Access-Control-Allow-Methods": "GET",
        "Access-Control-Allow-Headers": "Content-Type",
        "Access-Control-Max-Age": "3600",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
    }

    return


def file_get_contents(filename):
    import os

    if os.path.exists(filename):
        fp = open(filename, "r")
        content = fp.read()
        fp.close()
        return content


def get_base4(fname):
    import base64

    encoded = base64.b64encode(str.encode(fname))
    encoded
    return encoded.strip().decode("utf-8")


def base64UrlDecode(base64Url):
    from base64 import urlsafe_b64encode, urlsafe_b64decode
    import base64

    remainder = len(base64Url) % 4
    if remainder is not None:
        padlen = 4 - remainder
        input = base64Url + "." + ("=" * padlen)

    return base64.b64decode(
        codecs.encode(input).replace(b"-", b"+").replace(b"_", b"/")
    )


def base64UrlEncode(data):
    from base64 import urlsafe_b64encode, urlsafe_b64decode
    import base64
    import codecs

    str_header = str(data).strip().replace(" ", "").replace("'", '"')

    return (
        base64.b64encode(str_header.encode("latin-1"))
        .replace(b"+", b"-")
        .replace(b"/", b"_")
        .replace(b"=", b"")
    )


def base64UrlEncode2(data):
    return urlsafe_b64encode(data).rstrip(b"=")


def base64UrlDecode2(base64Url):
    padding = b"=" * (4 - (len(base64Url) % 4))

    return urlsafe_b64decode(base64Url + padding)
