<?php
/**
 * Système de likes pour les reels
 * Version sécurisée - WordPress.org compliant
 */

// Initialiser les métadonnées de likes à la création d'un reel
add_action('save_post_wprg_reel', 'wprg_init_likes_meta');
function wprg_init_likes_meta($post_id) {
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }

    $likes = get_post_meta($post_id, '_wprg_likes', true);
    if ($likes === '') {
        update_post_meta($post_id, '_wprg_likes', 0);
    }
}

// 🔐 Fonction sécurisée pour récupérer IP
function wprg_get_user_ip() {
    $ip = '0.0.0.0';
    
    if (!empty($_SERVER['REMOTE_ADDR'])) {
        $ip = sanitize_text_field(wp_unslash($_SERVER['REMOTE_ADDR']));
    }
    
    // Valider l'IP
    if (!filter_var($ip, FILTER_VALIDATE_IP)) {
        $ip = '0.0.0.0';
    }
    
    return $ip;
}

// AJAX: Récupérer le nombre de likes
add_action('wp_ajax_wprg_get_likes', 'wprg_get_likes');
add_action('wp_ajax_nopriv_wprg_get_likes', 'wprg_get_likes');
function wprg_get_likes() {
    // Vérification du nonce en PREMIÈRE LIGNE
    check_ajax_referer('wprg_likes_nonce', 'nonce');

    // Validation de l'ID du post
    $post_id = isset($_POST['post_id']) ? intval($_POST['post_id']) : 0;
    if ($post_id <= 0) {
        wp_send_json_error(['message' => 'ID du post invalide']);
    }

    // Vérifier que le post existe
    $post = get_post($post_id);
    if (!$post || $post->post_type !== 'wprg_reel') {
        wp_send_json_error(['message' => 'Post non trouvé ou type incorrect']);
    }

    $likes = get_post_meta($post_id, '_wprg_likes', true);
    $likes = $likes ? intval($likes) : 0;

    wp_send_json_success([
        'likes' => $likes,
        'formatted_likes' => wprg_get_formatted_likes($post_id)
    ]);
}

// AJAX: Ajouter/retirer un like
add_action('wp_ajax_wprg_add_like', 'wprg_add_like');
add_action('wp_ajax_nopriv_wprg_add_like', 'wprg_add_like');
function wprg_add_like() {
    // Vérification du nonce en PREMIÈRE LIGNE
    check_ajax_referer('wprg_likes_nonce', 'nonce');

    // Validation de l'ID du post
    $post_id = isset($_POST['post_id']) ? intval($_POST['post_id']) : 0;
    if ($post_id <= 0) {
        wp_send_json_error(['message' => 'ID du post invalide']);
    }

    // Vérifier que le post existe et est du bon type
    $post = get_post($post_id);
    if (!$post || $post->post_type !== 'wprg_reel') {
        wp_send_json_error(['message' => 'Reel non trouvé ou type incorrect']);
    }

    // Récupérer et valider l'IP
    $ip = wprg_get_user_ip();

    // Récupérer les IPs ayant liké
    $liked_ips = get_post_meta($post_id, '_wprg_liked_ips', true);
    if (!is_array($liked_ips)) {
        $liked_ips = [];
    }

    $has_liked = in_array($ip, $liked_ips, true);

    // Récupérer le nombre actuel de likes
    $current_likes = get_post_meta($post_id, '_wprg_likes', true);
    $current_likes = $current_likes ? intval($current_likes) : 0;

    if (!$has_liked) {
        // Ajouter un like
        $new_likes = $current_likes + 1;
        update_post_meta($post_id, '_wprg_likes', $new_likes);

        $liked_ips[] = $ip;
        update_post_meta($post_id, '_wprg_liked_ips', $liked_ips);

        // Nettoyer le cache
        clean_post_cache($post_id);

        wp_send_json_success([
            'likes' => $new_likes,
            'formatted_likes' => wprg_get_formatted_likes($post_id),
            'action' => 'added'
        ]);

    } else {
        // Retirer un like
        $new_likes = max(0, $current_likes - 1);
        update_post_meta($post_id, '_wprg_likes', $new_likes);

        $liked_ips = array_values(array_diff($liked_ips, [$ip]));
        update_post_meta($post_id, '_wprg_liked_ips', $liked_ips);

        // Nettoyer le cache
        clean_post_cache($post_id);

        wp_send_json_success([
            'likes' => $new_likes,
            'formatted_likes' => wprg_get_formatted_likes($post_id),
            'action' => 'removed'
        ]);
    }
}

// AJAX: Vérifier si l'utilisateur a déjà liké
add_action('wp_ajax_wprg_check_liked', 'wprg_check_liked');
add_action('wp_ajax_nopriv_wprg_check_liked', 'wprg_check_liked');
function wprg_check_liked() {
    // Vérification du nonce en PREMIÈRE LIGNE
    check_ajax_referer('wprg_likes_nonce', 'nonce');

    // Validation de l'ID du post
    $post_id = isset($_POST['post_id']) ? intval($_POST['post_id']) : 0;
    if ($post_id <= 0) {
        wp_send_json_error(['message' => 'ID du post invalide']);
    }

    // Vérifier que le post existe
    $post = get_post($post_id);
    if (!$post || $post->post_type !== 'wprg_reel') {
        wp_send_json_error(['message' => 'Post non trouvé ou type incorrect']);
    }

    $ip = wprg_get_user_ip();

    $liked_ips = get_post_meta($post_id, '_wprg_liked_ips', true);
    if (!is_array($liked_ips)) {
        $liked_ips = [];
    }

    $has_liked = in_array($ip, $liked_ips, true);

    wp_send_json_success([
        'liked' => $has_liked
    ]);
}

// Fonction utilitaire pour obtenir le nombre de likes formaté
function wprg_get_formatted_likes($post_id) {
    $post_id = intval($post_id);
    if ($post_id <= 0) {
        return '0';
    }

    $likes = get_post_meta($post_id, '_wprg_likes', true);
    $likes = $likes ? intval($likes) : 0;

    if ($likes >= 1000000) {
        return round($likes / 1000000, 1) . 'M';
    } elseif ($likes >= 1000) {
        return round($likes / 1000, 1) . 'k';
    }

    return number_format($likes);
}