<?php
namespace LivraisonAPI;

class Ajax {
    public function __construct() {
        add_action('wp_ajax_livraison_get_price', [$this, 'get_price']);
        add_action('wp_ajax_nopriv_livraison_get_price', [$this, 'get_price']);
        add_action('wp_ajax_livraison_track_order', [$this, 'track_order']);
        add_action('wp_ajax_nopriv_livraison_track_order', [$this, 'track_order']);
        add_action('wp_ajax_livraison_test_api', [$this, 'test_api']);
        add_action('wp_ajax_nopriv_livraison_test_api', [$this, 'test_api']);
        add_action('wp_ajax_livraison_get_stats', [$this, 'get_stats']);
        add_action('wp_ajax_nopriv_livraison_get_stats', [$this, 'get_stats']);
        
        // ✅ AJOUT: Récupérer les communes par pays (admin)
        add_action('wp_ajax_livraison_get_communes_by_country', [$this, 'get_communes_by_country']);
        
        // ✅ AJOUT: Récupérer la configuration de livraison
        add_action('wp_ajax_livraison_get_delivery_config', [$this, 'get_delivery_config']);
        add_action('wp_ajax_nopriv_livraison_get_delivery_config', [$this, 'get_delivery_config']);
        
       
    }

    public function test_api() {
        check_ajax_referer('livraison_api_nonce', 'nonce');
        
        $api = new API();
        $result = $api->get_communes();
        
        if ($result['success']) {
            wp_send_json_success([
                'message' => 'API connectée avec succès ! Communes disponibles: ' . count($result['data'])
            ]);
        } else {
            wp_send_json_error([
                'message' => isset($result['error']) ? $result['error'] : 'Erreur inconnue'
            ]);
        }
    }
   

    public function get_stats() {
        check_ajax_referer('livraison_api_nonce', 'nonce');
        
        global $wpdb;
        
        // ✅ CORRECTION: Utiliser le cache pour les statistiques
        $cache_key = 'livraison_ajax_stats';
        $cache_group = 'livraison_api';
        $stats = wp_cache_get( $cache_key, $cache_group );
        
        if ( false === $stats ) {
            // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching
            $total_courses = (int) $wpdb->get_var(
                "SELECT COUNT(*) FROM {$wpdb->prefix}livraison_api_logs"
            );
            
            // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching
            $total_delivered = (int) $wpdb->get_var(
                "SELECT COUNT(*) FROM {$wpdb->prefix}livraison_api_logs WHERE status = 'delivered'"
            );
            
            $stats = [
                'totalCourses' => $total_courses,
                'totalDelivered' => $total_delivered,
                'totalRevenue' => 0,
                'totalCommissions' => 0,
                'activeAgences' => 0
            ];
            
            // Mettre en cache pendant 5 minutes (300 secondes)
            wp_cache_set( $cache_key, $stats, $cache_group, 300 );
        }
        
        wp_send_json_success( $stats );
    }

    /**
     * Récupérer les communes par pays (pour l'admin)
     */
    public function get_communes_by_country() {
        // ✅ Vérifier le nonce
        if (!check_ajax_referer('livraison_api_nonce', 'nonce', false)) {
            wp_send_json_error(array('message' => 'Nonce invalide'));
            return;
        }
        
        // ✅ Vérifier les droits admin
        if (!current_user_can('manage_options')) {
            wp_send_json_error(array('message' => 'Non autorisé'));
            return;
        }
        
        $country = isset($_POST['country']) ? sanitize_text_field(wp_unslash($_POST['country'])) : 'CI';
        
        if (empty($country)) {
            wp_send_json_error(array('message' => 'Pays requis'));
            return;
        }
        
        $api = new API();
        $communes_response = $api->get_communes();
        
        if (!$communes_response['success'] || empty($communes_response['data'])) {
            wp_send_json_error(array('message' => 'Aucune commune trouvée'));
            return;
        }
        
        // ✅ Filtrer les communes par pays
        $filtered = array();
        foreach ($communes_response['data'] as $commune) {
            $commune_country = isset($commune['countryCode']) ? $commune['countryCode'] : 'CI';
            if ($commune_country === $country) {
                $filtered[] = $commune;
            }
        }
        
        wp_send_json_success(array(
            'communes' => $filtered,
            'total' => count($filtered),
            'country' => $country
        ));
    }

    /**
     * Récupérer la configuration de livraison
     */
    public function get_delivery_config() {
        // ✅ Vérifier le nonce (optionnel pour les requêtes publiques)
        if (isset($_POST['nonce']) && !check_ajax_referer('livraison_api_nonce', 'nonce', false)) {
            wp_send_json_error(array('message' => 'Nonce invalide'));
            return;
        }
        
        $api = new API();
        $result = $api->request('/api/v1/delivery/config', 'GET');
        
        if ($result['success'] && isset($result['data'])) {
            wp_send_json_success(array(
                'allowedCountries' => isset($result['data']['allowedCountries']) ? $result['data']['allowedCountries'] : ['CI'],
                'interCountryEnabled' => isset($result['data']['interCountryEnabled']) ? $result['data']['interCountryEnabled'] : false,
                'communes' => isset($result['data']['communes']) ? $result['data']['communes'] : [],
                'config' => $result['data']
            ));
        } else {
            // Fallback
            wp_send_json_success(array(
                'allowedCountries' => ['CI'],
                'interCountryEnabled' => false,
                'communes' => [],
                'fallback' => true
            ));
        }
    }

    public function get_delivery_price($pickupCommune, $clientCommune, $payerType = 'client') {
        // ✅ Si le commerçant paie, prix = 0
        if ($payerType === 'commercant') {
            return 0;
        }
        
        // ✅ Sinon, calculer le prix normal
        $result = $this->get_available_agences($pickupCommune, $pickupCommune, $clientCommune);
        
        if (!$result['success'] || empty($result['data']['agences'])) {
            $is_same = $pickupCommune === $clientCommune;
            return $is_same ? 1500 : 2000;
        }
        
        $agences = $result['data']['agences'];
        $best = reset($agences);
        
        $is_same = $pickupCommune === $clientCommune;
        return $is_same ? 
            ($best['deliveryPriceSame'] ?? 1500) : 
            ($best['deliveryPriceDifferent'] ?? 2000);
    }

    public function get_price() {
        check_ajax_referer('livraison_api_nonce', 'nonce');

        $depart = isset($_POST['depart']) ? sanitize_text_field(wp_unslash($_POST['depart'])) : '';
        $arrivee = isset($_POST['arrivee']) ? sanitize_text_field(wp_unslash($_POST['arrivee'])) : '';

        if (empty($depart) || empty($arrivee)) {
            wp_send_json_error('Veuillez spécifier les communes');
        }

        $api = new API();
        $communes = $api->get_communes();

        if (!$communes['success']) {
            wp_send_json_error('Erreur de connexion à l\'API');
        }

        $depart_data = null;
        $arrivee_data = null;

        foreach ($communes['data'] as $commune) {
            if ($commune['name'] === $depart) {
                $depart_data = $commune;
            }
            if ($commune['name'] === $arrivee) {
                $arrivee_data = $commune;
            }
        }

        if (!$depart_data || !$arrivee_data) {
            wp_send_json_error('Communes non trouvées');
        }

        $price = ($depart_data['id'] === $arrivee_data['id']) 
            ? $depart_data['priceSame'] 
            : $depart_data['priceDifferent'];

        wp_send_json_success([
            'price' => $price,
            'currency' => get_option('livraison_api_currency', 'FCFA'),
            'depart' => $depart_data['name'],
            'arrivee' => $arrivee_data['name']
        ]);
    }

    public function track_order() {
        check_ajax_referer('livraison_api_nonce', 'nonce');

        $order_id = isset($_POST['order_id']) ? sanitize_text_field(wp_unslash($_POST['order_id'])) : '';

        if (empty($order_id)) {
            wp_send_json_error('ID de commande requis');
        }

        $api = new API();
        $result = $api->get_order_status($order_id);

        if (!$result['success']) {
            wp_send_json_error('Commande non trouvée');
        }

        wp_send_json_success($result['data']);
    }

    
    

    
}