<?php
declare(strict_types=1);

ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
/**
 * admin/token-uret.php
 * - Oturum açmış admin için webhook token üretir
 * - token'ı config/config.php içindeki netgsm_webhook_token alanına yazar
 */
require_once __DIR__ . '/../lib/db.php';
require_once __DIR__ . '/../lib/helpers.php';

start_app_session();

if (empty($_SESSION['user_id'])) {
  header('Location: login.php');
  exit;
}

$configPath = __DIR__ . '/../config/config.php';
if (!is_file($configPath) || !is_readable($configPath) || !is_writable($configPath)) {
  http_response_code(500);
  echo "config/config.php okunamadı veya yazılamıyor. (Dosya izinleri 644/664 olmalı)";
  exit;
}

/** Güçlü token üret */
$token = bin2hex(random_bytes(24)); // 48 karakter

$cfgText = file_get_contents($configPath);
if ($cfgText === false) {
  http_response_code(500);
  echo "config dosyası okunamadı.";
  exit;
}

/**
 * config dosyasında şu anahtar bekleniyor:
 * 'netgsm_webhook_token' => '...',
 */
$pattern = "/('netgsm_webhook_token'\\s*=>\\s*)'[^']*'/";

if (!preg_match($pattern, $cfgText)) {
  // anahtar yoksa eklemeye çalış
  // return [ ... ]; yapısının kapanışından önce ekler
  $insertPattern = "/return\\s*\\[\\s*/";
  if (preg_match($insertPattern, $cfgText)) {
    $cfgText = preg_replace($insertPattern, "return [\n  'netgsm_webhook_token' => '{$token}',\n", $cfgText, 1);
  } else {
    http_response_code(500);
    echo "Config formatı beklenenden farklı. netgsm_webhook_token anahtarını elle ekle.";
    exit;
  }
} else {
  $cfgText = preg_replace($pattern, "$1'{$token}'", $cfgText, 1);
}

if (file_put_contents($configPath, $cfgText) === false) {
  http_response_code(500);
  echo "config dosyasına yazılamadı. Dosya izinlerini kontrol et.";
  exit;
}

// Ekrana token bas (sadece admin görebilsin diye oturum şart)
header('Content-Type: text/plain; charset=utf-8');
echo "OK\nTOKEN:\n" . $token . "\n";
