<?php
declare(strict_types=1);

ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

require_once __DIR__ . '/../../lib/db.php';       // yolunu projene göre düzelt
require_once __DIR__ . '/../../lib/helpers.php';  // eğer kullanmıyorsan kaldır

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

// NETGSM portalında "Sabit Değişken" olarak eklediğin secret ile aynı olmalı
const NETGSM_SECRET = '1b40bd059d3ee0f9c5acccf50618a46b259e9460b2c844f7';

function respond_ok(string $data = 'okunacak metin'): void {
  echo json_encode([
    'status' => 'success',
    'result' => 'i',
    'data'   => $data,
  ], JSON_UNESCAPED_UNICODE);
  exit;
}

function respond_err(string $msg = 'error'): void {
  echo json_encode([
    'status' => 'error',
    'result' => 'e',
    'data'   => $msg,
  ], JSON_UNESCAPED_UNICODE);
  exit;
}

// NETGSM genelde form-encoded POST gönderir.
// Bu yüzden hem $_POST hem ham body JSON kontrolü yapıyoruz.
$payload = $_POST;
if (empty($payload)) {
  $raw = file_get_contents('php://input');
  if ($raw) {
    $json = json_decode($raw, true);
    if (is_array($json)) $payload = $json;
  }
}

$secret = (string)($payload['secret'] ?? '');
if ($secret !== NETGSM_SECRET) {
  respond_err('invalid secret');
}

$arayan_no  = trim((string)($payload['arayan_no'] ?? ''));
$aranan_no  = trim((string)($payload['aranan_no'] ?? ''));
$santral_no = trim((string)($payload['santral_no'] ?? ''));
$arama_id   = trim((string)($payload['arama_id'] ?? ''));
$tus        = trim((string)($payload['tus_bilgisi'] ?? ''));

if ($arama_id === '') {
  respond_err('missing arama_id');
}

try {
  $pdo = db();

  // calls tablosuna yaz / güncelle
  $st = $pdo->prepare("
    INSERT INTO calls (arama_id, santral_no, arayan_no, aranan_no, last_tus, created_at, updated_at)
    VALUES (:arama_id, :santral_no, :arayan_no, :aranan_no, :last_tus, NOW(), NOW())
    ON DUPLICATE KEY UPDATE
      santral_no = VALUES(santral_no),
      arayan_no  = VALUES(arayan_no),
      aranan_no  = VALUES(aranan_no),
      last_tus   = VALUES(last_tus),
      updated_at = NOW()
  ");
  $st->execute([
    ':arama_id'   => $arama_id,
    ':santral_no' => $santral_no,
    ':arayan_no'  => $arayan_no,
    ':aranan_no'  => $aranan_no,
    ':last_tus'   => ($tus !== '' ? $tus : null),
  ]);

  // tuş geldiyse ivr_digits tablosuna da ekle (history)
  if ($tus !== '') {
    $st2 = $pdo->prepare("
      INSERT INTO ivr_digits (arama_id, tus_bilgisi, created_at)
      VALUES (:arama_id, :tus, NOW())
    ");
    $st2->execute([
      ':arama_id' => $arama_id,
      ':tus'      => $tus,
    ]);
  }

  // webhook_logs (opsiyonel ama çok faydalı)
  $st3 = $pdo->prepare("
    INSERT INTO webhook_logs (provider, event_type, payload_json, created_at)
    VALUES ('netgsm', 'santral_call', :payload, NOW())
  ");
  $st3->execute([
    ':payload' => json_encode($payload, JSON_UNESCAPED_UNICODE),
  ]);

  // NETGSM’nin çağrıda okutacağı metin (istersen boş da dönebilirsin)
  respond_ok('okunacak metin');
} catch (Throwable $e) {
  respond_err('db error');
}
