<?php
declare(strict_types=1);
// a3.php - sadece job kuyruğa ekler (Cloudflare timeout yok)

require __DIR__ . '/db.php';

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

$e = trim((string)($_GET['e'] ?? ''));
$f = trim((string)($_GET['f'] ?? ''));
$c = trim((string)($_GET['c'] ?? 'H6'));
$g = trim((string)($_GET['g'] ?? '')); // sheet seçimi (senin mantığına göre)
$mode = trim((string)($_GET['mode'] ?? ''));

// Yeni sistem: a1..a10 ve b1..b10 ile query param taşınabilir.
// Örn: a1=date_a&b1=01.01.2023&a2=date&b2=between&a3=date_b&b3=30.12.2023&a4=type&b4=1 ...
$qp = [];
for ($i=1; $i<=10; $i++) {
  $ak = trim((string)($_GET['a'.$i] ?? ''));
  if ($ak === '') continue;
  $bv = (string)($_GET['b'.$i] ?? '');
  $qp[$ak] = $bv; // değer boş olabilir; portal tarafı yok sayar
}

// Geriye dönük uyum: a1..b10 yoksa e/f ile eski url üretimi
if (count($qp) === 0) {
  if ($e === '' || $f === '') {
    http_response_code(400);
    echo json_encode(["ok"=>false,"error"=>"e ve f zorunlu (veya a1..b10 ile date_a/date_b gönder)"], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
    exit;
  }
  $qp = [
    "date_a" => $e,
    "date"   => "between",
    "date_b" => $f,
  ];
} else {
  // e/f ayrıca verilmişse ve qp içinde yoksa tamamla (opsiyonel)
  if ($e !== '' && !isset($qp['date_a'])) $qp['date_a'] = $e;
  if ($f !== '' && !isset($qp['date_b'])) $qp['date_b'] = $f;
  if (!isset($qp['date'])) $qp['date'] = 'between';
}

if ($c === '' || $g === '') {
  http_response_code(400);
  echo json_encode(["ok"=>false,"error"=>"c ve g zorunlu"], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
  exit;
}

$params = [
  "e"=>$e,
  "f"=>$f,
  "c"=>$c,
  "g"=>$g,
  "q"=>$qp,
];

// ---- Cache/Re-play kuralı:
// Eğer tarih aralığı tamamen geçmişte ise (f < bugün) ve aynı params ile daha önce DONE job varsa,
// yeniden fetch yapma, sadece replay job aç ve sheet'e yaz.
$today = new DateTime('today');
$f_replay = $f !== '' ? $f : (string)($qp['date_b'] ?? '');
$f_dt = DateTime::createFromFormat('d.m.Y', $f_replay) ?: null;

$can_replay = false;
if ($f_dt && $f_dt < $today) {
  $can_replay = true;
}

if ($mode === 'force') {
  $can_replay = false;
}

if ($can_replay) {
  // Aynı params ile done job var mı?
  $st = $pdo->prepare("SELECT id FROM a3_jobs WHERE status='done' AND params_json = ? ORDER BY id DESC LIMIT 1");
  $st->execute([json_encode($params, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES)]);
  $row = $st->fetch(PDO::FETCH_ASSOC);
  if ($row && !empty($row['id'])) {
    $replayParams = $params + ["mode"=>"replay","source_job_id"=>(int)$row['id']];
    $ins = $pdo->prepare("INSERT INTO a3_jobs (params_json,status,progress,total,created_at) VALUES (?, 'pending', 0, 0, NOW())");
    $ins->execute([json_encode($replayParams, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES)]);
    $job_id = (int)$pdo->lastInsertId();
    echo json_encode(["ok"=>true,"job_id"=>$job_id,"status_url"=>"/job_status.php?id=".$job_id,"replay_from"=>(int)$row['id']], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
    exit;
  }
}

// Normal job (fetch + write)
$ins = $pdo->prepare("INSERT INTO a3_jobs (params_json,status,progress,total,created_at) VALUES (?, 'pending', 0, 0, NOW())");
$ins->execute([json_encode($params, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES)]);
$job_id = (int)$pdo->lastInsertId();

echo json_encode(["ok"=>true,"job_id"=>$job_id,"status_url"=>"/job_status.php?id=".$job_id], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
