<?php
declare(strict_types=1);

use App\{Bootstrap, Security};

require __DIR__.'/../src/Env.php';
require __DIR__.'/../src/Logger.php';
require __DIR__.'/../src/DB.php';
require __DIR__.'/../src/Security.php';
require __DIR__.'/../src/RateLimiter.php';
require __DIR__.'/../src/Queue.php';
require __DIR__.'/../src/Sanitizer.php';
require __DIR__.'/../src/Utils.php';
require __DIR__.'/../src/Bootstrap.php';

try {
  // ⬅️ Bootstrap را هم داخل try بساز تا خطای DB/Log باعث 500 نشود
  $boot = new Bootstrap();

  // امنیت وبهوک
  Security::verifyTelegram($_SERVER['REQUEST_METHOD'] ?? 'GET', $_SERVER, $boot->log);

  // ورودی
  $raw = file_get_contents('php://input') ?: '{}';
  $update = json_decode($raw, true);

  // ریت‌لیمیت
  $uid = $update['message']['from']['id'] ?? $update['callback_query']['from']['id'] ?? null;
  if ($uid && !$boot->rl->allow('user:'.$uid)) { http_response_code(200); echo 'OK'; exit; }

  // عبور به منطق قدیمی (پل سازگاری)
  $GLOBALS['__update_override_raw'] = $raw;
  require __DIR__.'/../src/legacy/bot.php';

  http_response_code(200);
  echo 'OK';
} catch (Throwable $e) {
  // اگر Logger هنوز ساخته نشده بود، حداقل بریز تو error_log
  if (isset($boot) && isset($boot->log)) {
    $boot->log->error('Webhook error', ['e'=>$e->getMessage()]);
  } else {
    error_log('[webhook fatal] '.$e->getMessage());
  }
  // به تلگرام همیشه 200 برگردان تا retry نکند
  http_response_code(200);
  echo 'OK';
}
