<?php
// get_messages.php
// Autors: Kārlis Mālnieks
require_once 'db_connection.php'; // Pievienojam datubāzes savienojuma failu
require_once 'encryption_config.php'; // Pievienojam šifrēšanas konfigurācijas failu

// Pārbaudām, vai lietotājs ir pieteicies
if (!isset($_SESSION['user_id'])) {
    http_response_code(401); // Lietotājs nav pieteicies
    echo json_encode(['success' => false, 'message' => 'User not logged in.']);
    exit();
}

// Iegūstam chat_id no GET pieprasījuma un pārbaudām, vai tas ir derīgs
$chatId = filter_var($_GET['chat_id'] ?? null, FILTER_VALIDATE_INT);
if (!$chatId) {
    http_response_code(400); // Nepareizs čata ID
    echo json_encode(['success' => false, 'message' => 'Invalid Chat ID.']);
    exit();
}

// Pārbaudām, vai ir norādīta šifrēšanas atslēga
if (empty($ENCRYPTION_KEY)) {
    http_response_code(500); // Šifrēšanas atslēga trūkst
    echo json_encode(['success' => false, 'message' => 'Encryption key is missing.']);
    exit();
}

$key = $ENCRYPTION_KEY; // Saglabājam šifrēšanas atslēgu mainīgajā

try {
    // SQL vaicājums, lai iegūtu ziņas no datubāzes
    $stmt = $pdo->prepare("
        SELECT 
            m.id, 
            m.sender_id, 
            m.content, 
            m.sent_at, 
            m.iv,  // Inicializācijas vektors (iv)
            e.username AS sender_name
        FROM messages m
        JOIN emails_v e ON m.sender_id = e.id
        WHERE m.conversation_id = :chat_id
        ORDER BY m.sent_at ASC
    ");
    $stmt->execute(['chat_id' => $chatId]); // Izpildām vaicājumu ar čata ID

    $messages = $stmt->fetchAll(PDO::FETCH_ASSOC); // Iegūstam visas ziņas kā asociatīvu masīvu

    // Atšifrējam katras ziņas saturu
    foreach ($messages as &$message) {
        $iv = base64_decode($message['iv']); // Dekodējam iv (Inicializācijas vektors)
        $decryptedContent = openssl_decrypt($message['content'], 'aes-256-cbc', $key, 0, $iv); // Atšifrējam ziņas saturu
        $message['content'] = $decryptedContent ?: 'Decryption failed'; // Ja atšifrēšana neizdevās, norādām kļūdu
        unset($message['iv']); // Izņemam iv no ziņas, jo tas vairs nav nepieciešams
    }

    // Atgriežam ziņas kā JSON
    echo json_encode(['success' => true, 'messages' => $messages]);
} catch (PDOException $e) {
    // Ja notika kļūda datubāzē, reģistrējam kļūdu un atgriežam kļūdas ziņojumu
    error_log("Error fetching messages: " . $e->getMessage());
    http_response_code(500); // Iekšēja servera kļūda
    echo json_encode(['success' => false, 'message' => 'An error occurred while fetching messages.']);
}
?>
