<?php
/**
 * Script de test pour vérifier le support des temp_id dans l'API chat
 * 
 * Usage: php test_chat_temp_id.php
 */

// Configuration
$apiUrl = 'http://localhost/api';
$sessionId = 'test_session_id'; // À remplacer par un session_id valide

// Fonction pour faire une requête HTTP
function makeRequest($method, $endpoint, $data = null, $sessionId = null) {
    global $apiUrl;
    
    $ch = curl_init($apiUrl . $endpoint);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    
    $headers = ['Content-Type: application/json'];
    if ($sessionId) {
        $headers[] = 'Authorization: Bearer ' . $sessionId;
    }
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
    if ($data !== null) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    }
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    return [
        'code' => $httpCode,
        'response' => json_decode($response, true)
    ];
}

// Tests
echo "=== Tests de support des temp_id dans l'API Chat ===\n\n";

// Test 1: Création d'une room avec temp_id
echo "Test 1: Création d'une room avec temp_id\n";
$roomData = [
    'type' => 'private',
    'participants' => [2], // ID d'un autre utilisateur
    'title' => 'Test Room Offline',
    'temp_id' => 'temp_room_' . uniqid()
];

echo "Requête POST /chat/rooms avec temp_id: {$roomData['temp_id']}\n";
$result = makeRequest('POST', '/chat/rooms', $roomData, $sessionId);

if ($result['code'] === 201 && isset($result['response']['room']['temp_id'])) {
    echo "✅ Succès: Room créée avec temp_id retourné\n";
    echo "   - ID réel: " . $result['response']['room']['id'] . "\n";
    echo "   - temp_id: " . $result['response']['room']['temp_id'] . "\n";
    $roomId = $result['response']['room']['id'];
} else {
    echo "❌ Échec: temp_id non retourné dans la réponse\n";
    echo "   Response: " . json_encode($result['response']) . "\n";
    $roomId = null;
}
echo "\n";

// Test 2: Envoi d'un message avec temp_id
if ($roomId) {
    echo "Test 2: Envoi d'un message avec temp_id\n";
    $messageData = [
        'content' => 'Message créé hors ligne',
        'temp_id' => 'temp_msg_' . uniqid()
    ];
    
    echo "Requête POST /chat/rooms/{$roomId}/messages avec temp_id: {$messageData['temp_id']}\n";
    $result = makeRequest('POST', "/chat/rooms/{$roomId}/messages", $messageData, $sessionId);
    
    if ($result['code'] === 201 && isset($result['response']['message']['temp_id'])) {
        echo "✅ Succès: Message créé avec temp_id retourné\n";
        echo "   - ID réel: " . $result['response']['message']['id'] . "\n";
        echo "   - temp_id: " . $result['response']['message']['temp_id'] . "\n";
        $messageId = $result['response']['message']['id'];
    } else {
        echo "❌ Échec: temp_id non retourné dans la réponse\n";
        echo "   Response: " . json_encode($result['response']) . "\n";
        $messageId = null;
    }
    echo "\n";
}

// Test 3: Mise à jour d'une room avec temp_id
if ($roomId) {
    echo "Test 3: Mise à jour d'une room avec temp_id\n";
    $updateData = [
        'title' => 'Room mise à jour',
        'temp_id' => 'temp_update_room_' . uniqid()
    ];
    
    echo "Requête PUT /chat/rooms/{$roomId} avec temp_id: {$updateData['temp_id']}\n";
    $result = makeRequest('PUT', "/chat/rooms/{$roomId}", $updateData, $sessionId);
    
    if ($result['code'] === 200 && isset($result['response']['room']['temp_id'])) {
        echo "✅ Succès: Room mise à jour avec temp_id retourné\n";
        echo "   - temp_id: " . $result['response']['room']['temp_id'] . "\n";
    } else {
        echo "❌ Échec: temp_id non retourné dans la réponse\n";
        echo "   Response: " . json_encode($result['response']) . "\n";
    }
    echo "\n";
}

// Test 4: Mise à jour d'un message avec temp_id
if ($messageId) {
    echo "Test 4: Mise à jour d'un message avec temp_id\n";
    $updateData = [
        'content' => 'Message modifié',
        'temp_id' => 'temp_update_msg_' . uniqid()
    ];
    
    echo "Requête PUT /chat/messages/{$messageId} avec temp_id: {$updateData['temp_id']}\n";
    $result = makeRequest('PUT', "/chat/messages/{$messageId}", $updateData, $sessionId);
    
    if ($result['code'] === 200 && isset($result['response']['message']['temp_id'])) {
        echo "✅ Succès: Message mis à jour avec temp_id retourné\n";
        echo "   - temp_id: " . $result['response']['message']['temp_id'] . "\n";
    } else {
        echo "❌ Échec: temp_id non retourné dans la réponse\n";
        echo "   Response: " . json_encode($result['response']) . "\n";
    }
    echo "\n";
}

// Test 5: Création sans temp_id (doit continuer à fonctionner)
echo "Test 5: Création d'une room SANS temp_id (compatibilité)\n";
$roomData = [
    'type' => 'private',
    'participants' => [2],
    'title' => 'Test Room Normal'
];

echo "Requête POST /chat/rooms sans temp_id\n";
$result = makeRequest('POST', '/chat/rooms', $roomData, $sessionId);

if ($result['code'] === 201 && !isset($result['response']['room']['temp_id'])) {
    echo "✅ Succès: Room créée normalement sans temp_id\n";
    echo "   - ID: " . $result['response']['room']['id'] . "\n";
} else if ($result['code'] === 201) {
    echo "⚠️  Attention: Room créée mais temp_id présent alors qu'il ne devrait pas\n";
} else {
    echo "❌ Échec: Erreur lors de la création\n";
    echo "   Response: " . json_encode($result['response']) . "\n";
}

echo "\n=== Fin des tests ===\n";
echo "\nNote: Assurez-vous d'avoir un session_id valide et que l'API est accessible.\n";
echo "Pour obtenir un session_id valide, connectez-vous d'abord via POST /api/login\n";