Source: accessibility.js

/**
 * @file Accessibility preferences management
 * @description
 * This script handles user accessibility preferences:
 * - Dark / Light theme
 * - Visually impaired mode (adapted size/contrast)
 * - Filters for different types of color blindness
 *
 * Preferences are stored in localStorage and automatically
 * reapplied when the page loads.
 */

/**
 * Applies saved preferences from localStorage to the document.
 * @function applyPreferences
 * @returns {void}
 */
function applyPreferences() {
    const savedTheme = localStorage.getItem("theme");
    const savedMalvoyant = localStorage.getItem("Police");
    const savedDaltonienType = localStorage.getItem("typeDaltonien");

    const checkboxSombre = document.getElementById("checkboxSombre");
    const checkboxMalvoyant = document.getElementById("checkboxMalvoyant");

    /* =========================
           Dark Theme Management
        ========================== */
    if (savedTheme === "dark") {
        document.documentElement.classList.add("dark", "SombreBtn");
        if (checkboxSombre) checkboxSombre.checked = true;
    } else {
        document.documentElement.classList.remove("dark", "SombreBtn");
        if (checkboxSombre) checkboxSombre.checked = false;
    }

    /* =========================
           Visually Impaired Mode
        ========================== */
    if (savedMalvoyant === "malvoyant") {
        document.documentElement.classList.add("malvoyant", "MalvoyantBtn");
        if (checkboxMalvoyant) checkboxMalvoyant.checked = true;
    } else {
        document.documentElement.classList.remove("malvoyant", "MalvoyantBtn");
        if (checkboxMalvoyant) checkboxMalvoyant.checked = false;
    }

    /* =========================
           Color Blindness Management
        ========================== */
    document.documentElement.classList.remove(
        "daltonien",
        "protanopia",
        "deuteranopia",
        "tritanopia"
    );

    if (savedDaltonienType && savedDaltonienType !== "aucun") {
        document.documentElement.classList.add("daltonien", savedDaltonienType);
        const radioToCheck = document.querySelector(`input[name="daltonism-type"][value="${savedDaltonienType}"]`);
        if (radioToCheck) radioToCheck.checked = true;
    } else {
        const radioAucun = document.querySelector('input[name="daltonism-type"][value="aucun"]');
        if (radioAucun) radioAucun.checked = true;
    }
}

/**
 * Saves user preferences to localStorage when the form is submitted.
 * @function savePreferences
 * @param {SubmitEvent} event - The form submission event
 * @returns {void}
 */
function savePreferences(event) {


    const checkboxSombre = document.getElementById("checkboxSombre");
    const checkboxMalvoyant = document.getElementById("checkboxMalvoyant");
    const radioDaltonien = document.querySelector('input[name="daltonism-type"]:checked');

    /* =========================
       Theme Save
    ========================== */
    if (checkboxSombre && checkboxSombre.checked) {
        localStorage.setItem("theme", "dark");
    } else {
        localStorage.setItem("theme", "light");
    }

    /* =========================
       Visually Impaired Save
    ========================== */
    if (checkboxMalvoyant && checkboxMalvoyant.checked) {
        localStorage.setItem("Police", "malvoyant");
    } else {
        localStorage.setItem("Police", "voyant");
    }

    /* =========================
      Color Blindness Type Save
    ========================== */
    if (radioDaltonien && radioDaltonien.value) {
        localStorage.setItem("typeDaltonien", radioDaltonien.value);
    } else {
        localStorage.removeItem("typeDaltonien");
    }

    applyPreferences();
}

/**
 * Initializes the script when the DOM is fully loaded.
 * @event DOMContentLoaded
 */
document.addEventListener("DOMContentLoaded", () => {
    applyPreferences();

    const form = document.getElementById("accessForm");

    if (form) {
        form.addEventListener("submit", (event) => {
            event.preventDefault();
            savePreferences(event);
        });
    }
});