<?php
/**
 * Alter Invest — Module de Contact WordPress
 * ============================================
 *
 * INSTALLATION :
 * 1. Copier ce fichier dans le dossier du thème enfant ou dans un plugin custom
 * 2. Ajouter dans functions.php du thème :
 *    require_once get_stylesheet_directory() . '/alter-invest-contact.php';
 * 3. Ou créer un plugin : placer ce fichier dans /wp-content/plugins/alter-invest-contact/
 *    et ajouter le header Plugin ci-dessous.
 *
 * Le formulaire enverra un email à l'adresse configurée ci-dessous.
 *
 * Plugin Name: Alter Invest - Formulaire de Contact
 * Description: Gère l'envoi des demandes de contact depuis le site Alter Invest
 * Version: 1.0
 * Author: Alter Invest
 */

if (!defined('ABSPATH')) {
    exit; // Sécurité : empêcher l'accès direct
}

/**
 * Configuration
 */
define('AI_CONTACT_EMAIL', 'pbrunet@alter-invest.com');
define('AI_CONTACT_CC', '');  // Email en copie (laisser vide si non souhaité)
define('AI_CONTACT_SUBJECT_PREFIX', '[Alter Invest] ');

/**
 * Enqueue le script et passe les variables nécessaires au formulaire
 */
function alter_invest_contact_scripts() {
    // Injecter l'URL AJAX et le nonce dans la page
    wp_add_inline_script('jquery', sprintf(
        'var alterInvestAjaxUrl = "%s"; var alterInvestNonce = "%s";',
        admin_url('admin-ajax.php'),
        wp_create_nonce('alter_invest_contact_nonce')
    ));
}
add_action('wp_enqueue_scripts', 'alter_invest_contact_scripts');

/**
 * Handler AJAX — Utilisateurs connectés et non connectés
 */
function alter_invest_handle_contact() {
    // Vérifier le nonce (sécurité anti-CSRF)
    if (!wp_verify_nonce($_POST['nonce'] ?? '', 'alter_invest_contact_nonce')) {
        wp_send_json_error(['message' => 'Erreur de sécurité. Veuillez rafraîchir la page.']);
        return;
    }

    // Honeypot anti-spam
    if (!empty($_POST['website'])) {
        wp_send_json_success(); // Faire croire au bot que c'est OK
        return;
    }

    // Rate limiting simple (basé sur transient WordPress)
    $ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown';
    $rate_key = 'ai_contact_' . md5($ip);
    $attempts = get_transient($rate_key);
    if ($attempts && $attempts >= 5) {
        wp_send_json_error(['message' => 'Trop de demandes. Veuillez réessayer dans quelques minutes.']);
        return;
    }
    set_transient($rate_key, ($attempts ? $attempts + 1 : 1), 300); // 5 tentatives par 5 min

    // Sanitisation des données
    $nom       = sanitize_text_field($_POST['nom'] ?? '');
    $prenom    = sanitize_text_field($_POST['prenom'] ?? '');
    $email     = sanitize_email($_POST['email'] ?? '');
    $telephone = sanitize_text_field($_POST['telephone'] ?? '');
    $sujet     = sanitize_text_field($_POST['sujet'] ?? '');
    $message   = sanitize_textarea_field($_POST['message'] ?? '');

    // Validation
    $errors = [];
    if (empty($nom))     $errors[] = 'Le nom est requis.';
    if (empty($prenom))  $errors[] = 'Le prénom est requis.';
    if (!is_email($email)) $errors[] = 'L\'adresse email n\'est pas valide.';
    if (empty($sujet))   $errors[] = 'Veuillez choisir un sujet.';
    if (empty($message)) $errors[] = 'Le message est requis.';

    if (!empty($errors)) {
        wp_send_json_error(['message' => implode(' ', $errors)]);
        return;
    }

    // Construction de l'email
    $email_subject = AI_CONTACT_SUBJECT_PREFIX . 'Nouvelle demande — ' . $sujet;

    $email_body = sprintf(
        "Nouvelle demande de contact reçue via le site Alter Invest.\n\n" .
        "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n" .
        "Nom :        %s\n" .
        "Prénom :     %s\n" .
        "Email :      %s\n" .
        "Téléphone :  %s\n" .
        "Sujet :      %s\n\n" .
        "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n" .
        "MESSAGE :\n\n%s\n\n" .
        "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n" .
        "IP :   %s\n" .
        "Date : %s\n" .
        "Page : %s\n",
        $nom,
        $prenom,
        $email,
        $telephone ?: '(non renseigné)',
        $sujet,
        $message,
        $ip,
        wp_date('d/m/Y à H:i:s'),
        wp_get_referer() ?: '(inconnue)'
    );

    $headers = [
        'From: Alter Invest <noreply@alter-invest.fr>',
        'Reply-To: ' . $prenom . ' ' . $nom . ' <' . $email . '>',
        'Content-Type: text/plain; charset=UTF-8',
    ];

    if (!empty(AI_CONTACT_CC)) {
        $headers[] = 'Cc: ' . AI_CONTACT_CC;
    }

    // Envoi de l'email
    $sent = wp_mail(AI_CONTACT_EMAIL, $email_subject, $email_body, $headers);

    if ($sent) {
        // Email de confirmation au visiteur
        $confirm_subject = 'Alter Invest — Votre demande a bien été reçue';
        $confirm_body = sprintf(
            "Bonjour %s,\n\n" .
            "Nous avons bien reçu votre demande concernant : %s.\n\n" .
            "Notre équipe vous recontactera dans les meilleurs délais.\n\n" .
            "Cordialement,\n" .
            "Pierre Brunet\n" .
            "Alter Invest — Conseil en Gestion de Patrimoine\n" .
            "Tél : 06 80 35 30 54\n" .
            "www.alter-invest.fr",
            $prenom,
            $sujet
        );
        $confirm_headers = [
            'From: Pierre Brunet — Alter Invest <pbrunet@alter-invest.com>',
            'Content-Type: text/plain; charset=UTF-8',
        ];
        wp_mail($email, $confirm_subject, $confirm_body, $confirm_headers);

        // Log (optionnel, pour suivi)
        do_action('alter_invest_contact_sent', [
            'nom' => $nom, 'prenom' => $prenom, 'email' => $email,
            'telephone' => $telephone, 'sujet' => $sujet, 'message' => $message,
        ]);

        wp_send_json_success(['message' => 'Votre demande a été envoyée avec succès.']);
    } else {
        wp_send_json_error(['message' => 'Erreur lors de l\'envoi. Contactez-nous directement à pbrunet@alter-invest.com.']);
    }
}

// Enregistrer les handlers AJAX (connectés et non connectés)
add_action('wp_ajax_alter_invest_contact', 'alter_invest_handle_contact');
add_action('wp_ajax_nopriv_alter_invest_contact', 'alter_invest_handle_contact');

/**
 * Shortcode [alter_invest_contact] (optionnel)
 * Permet d'insérer le nonce dans n'importe quelle page WordPress
 */
function alter_invest_contact_shortcode() {
    return sprintf(
        '<script>var alterInvestNonce = "%s"; var AJAX_URL = "%s";</script>',
        wp_create_nonce('alter_invest_contact_nonce'),
        admin_url('admin-ajax.php')
    );
}
add_shortcode('alter_invest_contact', 'alter_invest_contact_shortcode');
