<?php
declare(strict_types=1);

/**
 * tus-capture.php
 * - Sadece o an gelen tus_bilgisi'ni döndürür.
 * - Geçmiş tuşlama kontrolü yapmaz.
 * - DB okuma/yazma yok.
 *
 * Beklenen NetGSM JSON formatı (tüm alanlar string):
 * {
 *   "status": "success" | "error",
 *   "result": "1" | "2" | "hangup",
 *   "data": "..."
 * }
 */

ini_set('display_errors', '0');
ini_set('display_startup_errors', '0');
error_reporting(0);
while (ob_get_level() > 0) { @ob_end_clean(); }

/** ✅ BU TOKEN'I DEĞİŞTİR */
$EXPECTED_TOKEN = '1b40bd059d3ee0f9c5acccf50618a46b259e9460b2c844f7';

/** JSON output */
function out(string $status, string $result, string $data = ''): void {
  header('Content-Type: application/json; charset=UTF-8');
  header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
  header('Pragma: no-cache');
  echo json_encode([
    'status' => (string)$status,
    'result' => (string)$result,
    'data'   => (string)$data,
  ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  exit;
}

function read_input(): array {
  $in = [];
  foreach (['token','arayan_no','aranan_no','santral_no','arama_id','tus_bilgisi','caller','from','msisdn'] as $k) {
    if (isset($_GET[$k]))  $in[$k] = (string)$_GET[$k];
    if (isset($_POST[$k])) $in[$k] = (string)$_POST[$k];
  }

  $ct = (string)($_SERVER['CONTENT_TYPE'] ?? $_SERVER['HTTP_CONTENT_TYPE'] ?? '');
  if (stripos($ct, 'application/json') !== false) {
    $raw = file_get_contents('php://input');
    $j = is_string($raw) ? json_decode($raw, true) : null;
    if (is_array($j)) {
      foreach ($j as $k => $v) {
        if (is_scalar($v) || $v === null) $in[(string)$k] = (string)$v;
      }
    }
  }
  return $in;
}

function norm_phone(string $s): string {
  $s = trim($s);
  if ($s === '') return '';
  return preg_replace('/\D+/', '', $s) ?? '';
}

/* ====== AKIŞ ====== */

$in = read_input();

$token    = trim((string)($in['token'] ?? ''));
$arayanNo = norm_phone((string)($in['arayan_no'] ?? $in['caller'] ?? $in['from'] ?? $in['msisdn'] ?? ''));
$tus      = trim((string)($in['tus_bilgisi'] ?? ''));

// Token kontrol
if ($EXPECTED_TOKEN !== '') {
  if ($token === '' || !hash_equals($EXPECTED_TOKEN, $token)) {
    out('error', 'hangup', 'Token hatalı veya eksik.');
  }
}

if ($arayanNo === '') {
  out('error', 'hangup', 'arayan_no eksik.');
}

// Bu endpoint geçmişe bakmaz. Sadece o an gelen tus'u döner.
if ($tus === '') {
  // tus gelmemişse bile success döndür (NetGSM undefined olmasın)
  out('success', '0', 'tus_bilgisi_yok');
}

// tus geldiyse direkt onu döndür
// result alanı string olmalı. Burada "1" veya "2" dönecek.
out('success', $tus, 'ok');
