<?php
/**
 * Plugin Name: Calculette Irrigation BRL
 * Description: Calculette de programmation d'irrigation avec nombre de rampes, logo BRL, conversions dose/temps/volume et sauvegarde utilisateur.
 * Version: 1.1.0
 * Author: BRL
 * Text Domain: calculette-irrigation-brl
 */

if (!defined('ABSPATH')) {
    exit;
}

final class BRL_Calculette_Irrigation {
    const VERSION = '1.1.0';
    const META_KEY = 'brl_calculette_irrigation_posts';

    public function __construct() {
        add_shortcode('calculette_irrigation', [$this, 'render_shortcode']);
        add_action('wp_enqueue_scripts', [$this, 'register_assets']);
        add_action('wp_ajax_brl_ci_load_posts', [$this, 'ajax_load_posts']);
        add_action('wp_ajax_brl_ci_save_posts', [$this, 'ajax_save_posts']);
    }

    public function register_assets() {
        $base = plugin_dir_url(__FILE__);
        wp_register_style('brl-calculette-irrigation', $base . 'assets/css/calculette-irrigation.css', [], self::VERSION);
        wp_register_script('brl-calculette-irrigation', $base . 'assets/js/calculette-irrigation.js', [], self::VERSION, true);
    }

    public function render_shortcode($atts = []) {
        wp_enqueue_style('brl-calculette-irrigation');
        wp_enqueue_script('brl-calculette-irrigation');
        wp_localize_script('brl-calculette-irrigation', 'BRLCalculetteIrrigation', [
            'ajaxUrl' => admin_url('admin-ajax.php'),
            'nonce' => wp_create_nonce('brl_ci_nonce'),
            'isLoggedIn' => is_user_logged_in(),
        ]);

        ob_start();
        ?>
        <div class="brl-ci" data-brl-calculette-irrigation>
            <section class="brl-ci-card brl-ci-intro">
                <div class="brl-ci-brand">
                    <img src="<?php echo esc_url(plugin_dir_url(__FILE__) . 'assets/img/brl-logo.png'); ?>" alt="BRL Exploitation">
                    <h2>Calculette programmation irrigations</h2>
                </div>
                <p>La calculette vous permet de transformer une dose à apporter en mm en temps d'irrigation ou en volume. Elle permet aussi de convertir un volume en dose ou en temps, et un temps d'irrigation en dose ou en volume.</p>
                <p>Renseignez les caractéristiques d'un poste d'irrigation : distances entre émetteurs, nombre de rampes, débit d'un émetteur et surface du poste.</p>
            </section>

            <section class="brl-ci-card">
                <div class="brl-ci-header-row">
                    <h3>1. Personnalisation de vos postes</h3>
                    <button type="button" class="brl-ci-secondary" data-action="new-post">Nouveau poste</button>
                </div>

                <label class="brl-ci-label" for="brl-ci-post-select">Poste sauvegardé</label>
                <select id="brl-ci-post-select" data-field="postSelect"></select>

                <div class="brl-ci-grid">
                    <label>Nom du poste
                        <input type="text" data-field="name" placeholder="Ex. Syrah Haut P1">
                    </label>
                    <label>Distance entre émetteurs sur le rang (m)
                        <input type="number" data-field="distRow" min="0" step="0.01" inputmode="decimal">
                    </label>
                    <label>Distance de plantation entre rangs (m)
                        <input type="number" data-field="distBetweenRows" min="0" step="0.01" inputmode="decimal">
                    </label>
                    <label>Nombre de rampes d'irrigation
                        <input type="number" data-field="rampCount" min="1" step="1" inputmode="numeric">
                    </label>
                    <label>Débit d'un émetteur (l/h)
                        <input type="number" data-field="emitterFlow" min="0" step="0.01" inputmode="decimal">
                    </label>
                    <label>Surface du poste (m²)
                        <input type="number" data-field="surface" min="0" step="1" inputmode="decimal">
                    </label>
                </div>

                <div class="brl-ci-actions">
                    <button type="button" data-action="save-post">Sauvegarder ce poste</button>
                    <button type="button" class="brl-ci-danger" data-action="delete-post">Supprimer</button>
                </div>
                <p class="brl-ci-help">Un émetteur est un goutteur, un asperseur, un microjet, etc. Les utilisateurs connectés synchronisent leurs postes avec leur compte WordPress ; les autres les conservent dans ce navigateur.</p>
            </section>

            <section class="brl-ci-card">
                <h3>2. Calculs issus des caractéristiques</h3>
                <div class="brl-ci-results">
                    <div><span>Maille</span><strong data-result="mesh">-</strong><em>m²</em></div>
                    <div><span>Pluviométrie horaire</span><strong data-result="rainfall">-</strong><em>mm/h</em></div>
                    <div><span>Débit du poste</span><strong data-result="stationFlow">-</strong><em>m³/h</em></div>
                </div>
            </section>

            <section class="brl-ci-card">
                <h3>3. Conversions</h3>
                <div class="brl-ci-tabs" role="tablist">
                    <button type="button" class="active" data-tab="dose">Depuis une dose</button>
                    <button type="button" data-tab="time">Depuis un temps</button>
                    <button type="button" data-tab="volume">Depuis un volume</button>
                </div>

                <div class="brl-ci-panel active" data-panel="dose">
                    <label>Dose à apporter (mm)
                        <input type="number" data-convert="dose" min="0" step="0.01" inputmode="decimal">
                    </label>
                    <div class="brl-ci-conversion-output">
                        <div>Temps d'irrigation : <strong data-result="doseToTime">-</strong></div>
                        <div>Volume apporté : <strong data-result="doseToVolume">-</strong> m³</div>
                    </div>
                </div>

                <div class="brl-ci-panel" data-panel="time">
                    <div class="brl-ci-grid brl-ci-grid-small">
                        <label>Heures
                            <input type="number" data-convert="timeHours" min="0" step="1" inputmode="numeric">
                        </label>
                        <label>Minutes
                            <input type="number" data-convert="timeMinutes" min="0" max="59" step="1" inputmode="numeric">
                        </label>
                    </div>
                    <div class="brl-ci-conversion-output">
                        <div>Dose : <strong data-result="timeToDose">-</strong> mm</div>
                        <div>Volume apporté : <strong data-result="timeToVolume">-</strong> m³</div>
                    </div>
                </div>

                <div class="brl-ci-panel" data-panel="volume">
                    <label>Volume apporté (m³)
                        <input type="number" data-convert="volume" min="0" step="0.01" inputmode="decimal">
                    </label>
                    <div class="brl-ci-conversion-output">
                        <div>Dose : <strong data-result="volumeToDose">-</strong> mm</div>
                        <div>Temps d'irrigation : <strong data-result="volumeToTime">-</strong></div>
                    </div>
                </div>
            </section>

            <p class="brl-ci-status" data-result="status" aria-live="polite"></p>
        </div>
        <?php
        return ob_get_clean();
    }

    public function ajax_load_posts() {
        check_ajax_referer('brl_ci_nonce', 'nonce');
        if (!is_user_logged_in()) {
            wp_send_json_success(['posts' => []]);
        }
        $posts = get_user_meta(get_current_user_id(), self::META_KEY, true);
        wp_send_json_success(['posts' => is_array($posts) ? $posts : []]);
    }

    public function ajax_save_posts() {
        check_ajax_referer('brl_ci_nonce', 'nonce');
        if (!is_user_logged_in()) {
            wp_send_json_error(['message' => 'Utilisateur non connecté.'], 403);
        }
        $raw = isset($_POST['posts']) ? wp_unslash($_POST['posts']) : '[]';
        $decoded = json_decode($raw, true);
        if (!is_array($decoded)) {
            wp_send_json_error(['message' => 'Données invalides.'], 400);
        }
        $posts = array_values(array_map([$this, 'sanitize_post'], $decoded));
        update_user_meta(get_current_user_id(), self::META_KEY, $posts);
        wp_send_json_success(['posts' => $posts]);
    }

    private function sanitize_post($post) {
        return [
            'id' => sanitize_text_field($post['id'] ?? wp_generate_uuid4()),
            'name' => sanitize_text_field($post['name'] ?? ''),
            'distRow' => floatval($post['distRow'] ?? 0),
            'distBetweenRows' => floatval($post['distBetweenRows'] ?? 0),
            'rampCount' => max(1, intval($post['rampCount'] ?? 1)),
            'emitterFlow' => floatval($post['emitterFlow'] ?? 0),
            'surface' => floatval($post['surface'] ?? 0),
        ];
    }
}

new BRL_Calculette_Irrigation();
