<?php
// send_messages.php
// Autors: Kārlis Mālnieks
require_once 'db_connection.php'; // Pievienojam datubāzes savienojumu
require_once 'encryption_config.php'; // Pievienojam šifrēšanas konfigurāciju

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

// Iegūstam datus no pieprasījuma (JSON formāts)
$data = json_decode(file_get_contents('php://input'), true);

// Iegūstam čata ID un ziņojuma saturu
$chatId = $data['chat_id'] ?? null;
$message = $data['message'] ?? null;
$userId = $_SESSION['user_id']; // Lietotāja ID no sesijas

// Pārbaudām, vai abi nepieciešamie parametri ir norādīti
if (!$chatId || !$message) {
    http_response_code(400); // Ja trūkst nepieciešamie parametri
    echo json_encode(['success' => false, 'message' => 'Chat ID and message are required.']);
    exit();
}

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

// Šifrējam ziņojumu
$key = $ENCRYPTION_KEY;
$iv = random_bytes(16); // Izveidojam nejaušu inicializācijas vektoru
$cipheredMessage = openssl_encrypt($message, 'aes-256-cbc', $key, 0, $iv);

// Pārbaudām, vai šifrēšana ir veiksmīga
if (!$cipheredMessage) {
    http_response_code(500); // Ja šifrēšana neizdodas
    echo json_encode(['success' => false, 'message' => 'Failed to encrypt the message.']);
    exit();
}

try {
    // SQL vaicājums, lai ievietotu ziņojumu datubāzē
    $stmt = $pdo->prepare("
        INSERT INTO messages (conversation_id, sender_id, content, sent_at, iv)
        VALUES (:chat_id, :sender_id, :content, NOW(), :iv)
    ");
    $stmt->execute([
        'chat_id' => $chatId, // Čata ID
        'sender_id' => $userId, // Lietotāja ID
        'content' => $cipheredMessage, // Šifrētais ziņojums
        'iv' => base64_encode($iv), // Inicializācijas vektors, kodēts base64
    ]);

    // Iegūstam ziņojuma ID
    $messageId = $pdo->lastInsertId();

    // Atgriežam ziņojumu ar ziņojuma ID
    echo json_encode(['success' => true, 'message_id' => $messageId]);
} catch (PDOException $e) {
    // Kļūdu apstrāde
    error_log("Message sending error: " . $e->getMessage());
    http_response_code(500); // Ja ir kļūda datubāzē
    echo json_encode(['success' => false, 'message' => 'An error occurred while sending the message.']);
}
?>
