<?php

declare(strict_types=1);

require_once __DIR__ . '/../src/config.php';
require_once __DIR__ . '/../src/logger.php';
require_once __DIR__ . '/../src/storage.php';
require_once __DIR__ . '/../src/history.php';
require_once __DIR__ . '/../src/bitrix.php';
require_once __DIR__ . '/../src/bitrix_bot.php';
require_once __DIR__ . '/../src/prompts.php';
require_once __DIR__ . '/../src/openai.php';
require_once __DIR__ . '/../src/crm.php';
require_once __DIR__ . '/../src/bot.php';
require_once __DIR__ . '/../src/bot_inbox.php';

header('Content-Type: application/json; charset=utf-8');

$rawBody = file_get_contents('php://input') ?: '';
$payload = $_REQUEST;

if (!$payload && $rawBody !== '') {
    $decoded = json_decode($rawBody, true);
    $payload = is_array($decoded) ? $decoded : [];
}

logMessage('info', 'Bitrix bot event received', [
    'request' => $_REQUEST,
    'raw_body_length' => strlen($rawBody),
    'headers' => function_exists('getallheaders') ? getallheaders() : [],
]);

try {
    $path = enqueueBotInboxEvent($payload);
    echo json_encode(['ok' => true, 'queued' => basename($path)]);
    // Confirm receipt only after durable storage; long AI requests can then outlive the webhook.
    if (function_exists('fastcgi_finish_request')) fastcgi_finish_request();
    ignore_user_abort(true);
    processBotInboxEvent($path);
} catch (Throwable $exception) {
    logMessage('error', 'Bitrix bot event failed', [
        'error' => $exception->getMessage(),
        'payload' => $payload,
    ]);

    http_response_code(500);
    echo json_encode([
        'ok' => false,
        'error' => $exception->getMessage(),
    ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
}
