/**
 * Fonction permettant d'afficher un message dans un toastr
 * @param {String} message
 */
 function showToastr(message, success = false) {
    let x = document.getElementById("toastr");
    if ( message ) {
        x.getElementsByTagName("SPAN")[0].innerHTML = message;
    }

    x.className = `${x.className} show`.replace("sucess", "");
    if ( success ) {
        x.className = `${x.className} success`;
    }
    setTimeout(function(){ x.className = x.className.replace("show", ""); }, 3000);
};

/**
 * Fonction permettant de masquer le toastr
 */
function hideToastr() {
    let x = document.getElementById("toastr");

    x.className = x.className.replace("show", "");
    x.getElementsByTagName("SPAN")[0].innerHTML = "";
}

/**
 * Fonction permettant de récupérer la valeur d'un cookie
 * @param {String} cname
 * @param {String} defaultValue
 *
 * @return {String}
 */
function getCookie(cname, defaultValue = 'false') {
    let name = cname + "=";
    let decodedCookie = decodeURIComponent(document.cookie);
    let ca = decodedCookie.split(';');
    for(let i = 0; i < ca.length; i+=1) {
        let c = ca[i];
        while (c.charAt(0) == ' ') {
        c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
        return c.substring(name.length, c.length);
        }
    }
    return defaultValue;
}

/**
 * Fonction permettant de créer un cookie
 * @param {String} cname
 * @param {String} cvalue
 * @param {Number} exdays
 */
function setCookie(cname, cvalue, exdays = 30) {
    const d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    let expires = "expires="+ d.toUTCString();
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

/**
 * Fonction de (dé)charger le thème accessible
 * @param {String} value
 */
function setAriaTheme(value) {
    let body = document.body;
    if ( value === 'true' ) {
        let classesString = body.className || "";
        if (classesString.indexOf("is-accessible") === -1) {
            body.classList.add("is-accessible");
        }
    } else {
        body.classList.remove("is-accessible");
    }
}

/**
 * Fonction de (dé)charger  le thème accessible
 */
function switchAriaTheme() {
    let body = document.body;

    body.classList.toggle("is-accessible");

    setCookie('ariatheme', body.classList.contains("is-accessible"));
}

/**
 * Fonction permettant de switcher de thème clair/sombre
 * @param {Object} e
 */
function switchTheme(e) {
    const theme = e.target.checked ? 'dark' : 'light';

    document.documentElement.setAttribute('data-theme', theme);
    setCookie('theme', theme);
}

/**
 * Ensemble d'actions effectuées au chargement de la page
 */
document.addEventListener('DOMContentLoaded', () => {
    const $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);
    if ($navbarBurgers.length > 0) {
    $navbarBurgers.forEach( el => {
            el.addEventListener('click', () => {
                const target = el.dataset.target;
                const $target = document.getElementById(target);

                el.classList.toggle('is-active');
                $target.classList.toggle('is-active');
            });
        });
    }

    const switchAriaThemeBtn = document.querySelector("#switchAriaTheme");
    if ( switchAriaThemeBtn ) {
        switchAriaThemeBtn.addEventListener("click", switchAriaTheme);
    }
    setAriaTheme(getCookie('ariatheme'));

    const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');
    if ( toggleSwitch ) {
        toggleSwitch.addEventListener('change', switchTheme, false);
    }

    let currentThemeIsDark = getCookie('theme');
    if ( currentThemeIsDark === 'false' && window.matchMedia ) {
        currentThemeIsDark = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
    }
    switchTheme({target: {checked: currentThemeIsDark === 'dark'}});
    if ( toggleSwitch) {
        toggleSwitch.checked = currentThemeIsDark === 'dark';
    }
});