<?php
defined('ABSPATH') || exit;

/*
 * Ajout d'un menu dans la backoffice
 */

// le menu
function hpixl_securicheck_Menu_Admin_Link()
{

    /*nombre d'erreurs du dernier audit*/
    $lastAudit = new hpixl_securicheck_audit(-1, null);
    $nbErreur = $lastAudit->resultats->nb_total_erreurs;
    if (!$nbErreur)
        $nbErreur = 0;
    //le menu prioncipal
    add_menu_page(
        '', // Title of the page
        'Securicheck <span class="update-plugins count-' . $nbErreur . '"><span class="plugin-count">' . $nbErreur . '</span></span>', // Text to show on the menu link
        'manage_options', // Capability requirement to see the link
        HPIXL_SECURICHECK_SETTINGS_SLUG, // The 'slug' - file to display when clicking the link
        'hpixl_securicheck_render_audit_page', // Display callback
        'dashicons-admin-generic', // Icon generique, changé grace au css pour le dashion spécifique
        66 // Priority/position. Just after 'Plugins'
    );


    // On crée un élément de sous menu: Audit
    add_submenu_page(
        HPIXL_SECURICHECK_SETTINGS_SLUG, // slug du Menu Parent
        __('Audit Securicheck', 'securicheck'),
        'Audit <span class="update-plugins count-' . $nbErreur . '"><span class="plugin-count">' . $nbErreur . '</span></span>',  // Menu title, Text Domain(pour la traduction)
        'manage_options',                     // Capabilities (Capacités)
        HPIXL_SECURICHECK_SETTINGS_SLUG,              // Slug du sous menu
        'hpixl_securicheck_render_audit_page',       // affichage de la page
        0
    );

    // On crée un élément de sous menu: Réglages
    add_submenu_page(
        HPIXL_SECURICHECK_SETTINGS_SLUG, // slug du Menu Parent
        __('Réglages Securicheck', 'securicheck'),
        __('Réglages Audit', 'securicheck'), // Menu title       
        'manage_options',                     // Capabilities (Capacités)
        HPIXL_SECURICHECK_SETTINGS_SLUG . '-reglages',              // Slug du sous menu
        'hpixl_securicheck_render_reglages_page',       // affichage de la page
        1
    );

    // On crée un élément de sous menu: Réglages
    add_submenu_page(
        HPIXL_SECURICHECK_SETTINGS_SLUG, // slug du Menu Parent
        __('Protection Login', 'securicheck'),
        __('Protection Login', 'securicheck'), // Menu title       
        'manage_options',                     // Capabilities (Capacités)
        HPIXL_SECURICHECK_SETTINGS_SLUG . '-protection-login',              // Slug du sous menu
        'hpixl_securicheck_render_protection_login_page',       // affichage de la page
        2
    );

    // On crée un élément de sous menu: Réglages
    add_submenu_page(
        HPIXL_SECURICHECK_SETTINGS_SLUG, // slug du Menu Parent
        __('Protection Spam', 'securicheck'),
        __('Protection Spam', 'securicheck'), // Menu title       
        'manage_options',                     // Capabilities (Capacités)
        HPIXL_SECURICHECK_SETTINGS_SLUG . '-protection-spam',              // Slug du sous menu
        'hpixl_securicheck_render_protection_spam_page',       // affichage de la page
        3
    );


    // On crée un élément de sous menu: Réglages de Sécurité. Pour montrer le menu de securicheck pro
    if (!is_plugin_active(HPIXL_SECURICHECK_PREMIUM_PLUGIN_NAME)) {
        // On crée un élément de sous menu: Sécurité
        add_submenu_page(
            HPIXL_SECURICHECK_SETTINGS_SLUG, // slug du Menu Parent
            __('Sécurité Securicheck', 'securicheck'),  // Titre de la page
            __('Réglages Sécurité', 'securicheck'),  // Menu title, Text Domain(pour la traduction)
            'manage_options',                     // Capabilities (Capacités)
            HPIXL_SECURICHECK_SETTINGS_SLUG . '-go-pro-securité',              // Slug du sous menu
            'securicheck_render_securite_page',       // affichage de la page
            4
        );
    }

    // On crée un élément de sous menu: Outils. Pour montrer le menu de securicheck pro
    if (!is_plugin_active(HPIXL_SECURICHECK_PREMIUM_PLUGIN_NAME)) {
        // On crée un élément de sous menu: Sécurité
        add_submenu_page(
            HPIXL_SECURICHECK_SETTINGS_SLUG, // slug du Menu Parent
            __('Outils', 'securicheck'),  // Titre de la page
            __('Outils', 'securicheck'),  // Menu title, Text Domain(pour la traduction)
            'manage_options',                     // Capabilities (Capacités)
            HPIXL_SECURICHECK_SETTINGS_SLUG . '-go-pro-outils',              // Slug du sous menu
            'securicheck_render_outils_page',       // affichage de la page
            5
        );
    }

    $tableauConFailed = hpixl_securicheck_get_connexions_failed_last_30days();
    $nbConFailed = 0;
    if ($tableauConFailed)
        $nbConFailed = count($tableauConFailed);
    // On crée un élément de sous menu: Connexions
    add_submenu_page(
        HPIXL_SECURICHECK_SETTINGS_SLUG, // slug du Menu Parent
        'Logs Connexions',  // Titre de la page
        $nbConFailed > 0 ? 'Logs Connexions <span class="hpixl-securicheck-audit-badge-warning" style="margin-left:2px;">' . esc_html($nbConFailed) . '</span>' : 'Logs connexions',  // Menu title
        'manage_options',                     // Capabilities (Capacités)
        HPIXL_SECURICHECK_SETTINGS_SLUG . '-connexions',              // Slug du sous menu
        'hpixl_securicheck_render_connexions_page',       // affichage de la page
        10
    );

    // On crée un élément de sous menu: Licence. Pour montrer le menu de securicheck pro
    if (!is_plugin_active(HPIXL_SECURICHECK_PREMIUM_PLUGIN_NAME)) {
        // On crée un élément de sous menu: Sécurité uniquement si Securicheck Pro n'est pas activé
        add_submenu_page(
            HPIXL_SECURICHECK_SETTINGS_SLUG, // slug du Menu Parent
            __('Licence', 'securicheck'),  // Titre de la page
            '<div id="securicheck-licence-pro">' . __('Version Pro', 'securicheck') . '</div>',  // Menu title, Text Domain(pour la traduction)
            'manage_options',                     // Capabilities (Capacités)
            HPIXL_SECURICHECK_SETTINGS_SLUG . '-go-pro-licence',              // Slug du sous menu
            'securicheck_render_licence_pro_page',       // affichage de la page
            20
        );
    }
}
add_action('admin_menu', 'hpixl_securicheck_Menu_Admin_Link');


/**
 * Traitement des formulaires de la page Audit avant tout affichage (pattern PRG).
 * Évite le warning "headers already sent" causé par des plugins tiers (ex: WP-Optimize)
 * qui tentent de définir des headers HTTP après que WordPress a commencé à envoyer du HTML.
 */
add_action('admin_init', 'hpixl_securicheck_process_audit_forms');

function hpixl_securicheck_process_audit_forms()
{
    if (!isset($_GET['page']) || $_GET['page'] !== HPIXL_SECURICHECK_SETTINGS_SLUG) {
        return;
    }
    if (!current_user_can('manage_options')) {
        return;
    }

    // Lancer un audit
    if (isset($_POST['btn-submit-audit']) && $_POST['btn-submit-audit'] !== '') {
        $nonce_ok = (isset($_POST['_wpnonce-lancer-audit-bienvenue']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['_wpnonce-lancer-audit-bienvenue'])), 'lancer_audit')) ||
            (isset($_POST['_wpnonce-lancer-audit']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['_wpnonce-lancer-audit'])), 'lancer_audit'));
        if (!$nonce_ok) {
            wp_die(
                __('Échec de la vérification de sécurité pour la création d\'un audit.', 'securicheck'),
                __('Création de l\'audit annulé', 'securicheck'),
                array('back_link' => true)
            );
        }
        new hpixl_securicheck_audit(null, HPIXL_SECURICHECK_AUDIT_MODE_MANUEL);
        wp_safe_redirect(admin_url('admin.php?page=' . HPIXL_SECURICHECK_SETTINGS_SLUG));
        exit;
    }

    // Charger un audit
    if (isset($_POST['charger-audit']) && $_POST['charger-audit'] !== '') {
        if (!isset($_POST['_wpnonce-charger-audit']) || !wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['_wpnonce-charger-audit'])), 'charger-audit')) {
            wp_die(
                __('Échec de la vérification de sécurité pour le chargement d\'un audit.', 'securicheck'),
                __('Chargement de l\'audit annulé', 'securicheck'),
                array('back_link' => true)
            );
        }
        $idAudit = intval($_POST['charger-audit']);
        wp_safe_redirect(admin_url('admin.php?page=' . HPIXL_SECURICHECK_SETTINGS_SLUG . '&load_audit=' . $idAudit));
        exit;
    }

    // Supprimer un audit
    if (isset($_POST['supprimer-audit']) && $_POST['supprimer-audit'] !== '') {
        if (!isset($_POST['_wpnonce-supprimer-audit']) || !wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['_wpnonce-supprimer-audit'])), 'supprimer-audit')) {
            wp_die(
                __('Échec de la vérification de sécurité pour la suppression d\'un audit.', 'securicheck'),
                __('Suppression de l\'audit annulé', 'securicheck'),
                array('back_link' => true)
            );
        }
        $idAudit = intval($_POST['supprimer-audit']);
        hpixl_securicheck_delete_audit($idAudit);
        wp_safe_redirect(admin_url('admin.php?page=' . HPIXL_SECURICHECK_SETTINGS_SLUG));
        exit;
    }
}


//le contenu de la page Protection Login
function hpixl_securicheck_render_protection_login_page()
{
    $screen = new hpixl_securicheck_ScreenProtectionLogin();
    $screen->render_screen();
}

//le contenu de la page Protection Spam
function hpixl_securicheck_render_protection_spam_page()
{
    $screen = new hpixl_securicheck_ScreenProtectionSpam();
    $screen->render_screen();
}

//le contenu de la page réglages
function hpixl_securicheck_render_reglages_page()
{
    $screen = new hpixl_securicheck_ScreenReglages();
    $screen->render_screen();
}

//le contenu de la page des connexions
function hpixl_securicheck_render_connexions_page()
{
    //include dirname(__FILE__) . '/reglages.php';
    $screen = new hpixl_securicheck_ScreenConnexions();
    $screen->render_screen();
}

//le contenu de la page Audit
function hpixl_securicheck_render_audit_page()
{
    // include dirname(__FILE__) . '/Screen_audit.php';
    $screen = new hpixl_securicheck_ScreenAudit();
    $screen->render_screen();
}

//le contenu de la page licence pour renvoyer vers l'achat d'une licence
function securicheck_render_securite_page()
{
    $screen = new hpixl_securicheck_ScreenReglagesSecuriteGoPro();
    $screen->render_screen();
}

//le contenu de la page licence pour renvoyer vers l'achat d'une licence
function securicheck_render_licence_pro_page()
{
    $screen = new hpixl_securicheck_ScreenLicenceGoPro();
    $screen->render_screen();
}

//le contenu de la page licence pour renvoyer vers l'achat d'une licence
function securicheck_render_outils_page()
{
    $screen = new hpixl_securicheck_ScreenOutilGoPro();
    $screen->render_screen();
}
