<?php
declare(strict_types=1);
session_start();

// mbstring kapalıysa sayfa patlamasın diye güvenli fallback
if (!function_exists('mb_strlen')) { function mb_strlen($s, $enc=null){ return strlen((string)$s); } }
if (!function_exists('mb_substr')) { function mb_substr($s, $start, $len=null, $enc=null){ return $len===null ? substr((string)$s, (int)$start) : substr((string)$s, (int)$start, (int)$len); } }
if (!function_exists('mb_strpos')) { function mb_strpos($haystack, $needle, $offset=0, $enc=null){ return strpos((string)$haystack, (string)$needle, (int)$offset); } }

// === PDF + Kullanıcı Bilgisi Kayıt (DB + pfdx364 dizini) ===
// Not: İstersen ENV ile ayarla:
//   YKS_PDFLOG_DSN   = mysql:host=localhost;dbname=DB_ADI;charset=utf8mb4
//   YKS_PDFLOG_USER  = kullanici
//   YKS_PDFLOG_PASS  = sifre
//   YKS_PDFLOG_TABLE = yks_pdf_kayitlar
$PDF_SAVE_DIRNAME = 'pfdx364';
$DBCFG = [
  'dsn'   => getenv('YKS_PDFLOG_DSN')  ?: 'mysql:host=localhost;dbname=univs;charset=utf8mb4',
  'user'  => getenv('YKS_PDFLOG_USER') ?: 'root',
  'pass'  => getenv('YKS_PDFLOG_PASS') ?: 'Z15454drfdll8r8drtG',
  'table' => getenv('YKS_PDFLOG_TABLE')?: 'yks_pdf_kayitlar',
];

function _yks_debug_enabled(): bool {
  return (isset($_GET['debug']) && $_GET['debug'] == '1');
}
function _yks_json($arr){
  echo json_encode($arr, JSON_UNESCAPED_UNICODE);
}
function _yks_table_name(string $t): string {
  // tablo adını güvenli tut
  if (!preg_match('/^[A-Za-z0-9_]+$/', $t)) return 'yks_pdf_kayitlar';
  return $t;
}
function _yks_pdo(): ?PDO {
  static $pdo = null;
  global $DBCFG;
  if ($pdo !== null) return $pdo;
  try {
    $pdo = new PDO($DBCFG['dsn'], $DBCFG['user'], $DBCFG['pass'], [
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
      PDO::ATTR_EMULATE_PREPARES => false,
    ]);
    return $pdo;
  } catch (Throwable $e) {
    if (_yks_debug_enabled()) {
      error_log('[YKS-PDFLOG][PDO] '.$e->getMessage());
    }
    return null;
  }
}
function _yks_ensure_table(PDO $pdo): void {
  global $DBCFG;
  $t = _yks_table_name((string)$DBCFG['table']);
  // Eğer zaten oluşturduysan bu hiçbir şeyi bozmaz.
  $sql = "CREATE TABLE IF NOT EXISTS `$t` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `full_name` VARCHAR(255) NULL,
    `tckn` VARCHAR(11) NULL,
    `phone` VARCHAR(32) NULL,
    `email` VARCHAR(255) NULL,
    `exam_year` INT NULL,
    `pdf_original` VARCHAR(255) NULL,
    `pdf_path` VARCHAR(512) NOT NULL,
    `ip` VARCHAR(45) NULL,
    `user_agent` VARCHAR(255) NULL,
    `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_tckn` (`tckn`),
    KEY `idx_created_at` (`created_at`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_turkish_ci";
  $pdo->exec($sql);
}
function _yks_norm_str($v, int $max = 255): ?string {
  $v = trim((string)($v ?? ''));
  if ($v === '') return null;
  if (mb_strlen($v) > $max) $v = mb_substr($v, 0, $max);
  return $v;
}
function _yks_norm_tckn($v): ?string {
  $v = preg_replace('/\D+/', '', (string)($v ?? ''));
  if ($v === '') return null;
  if (strlen($v) > 11) $v = substr($v, 0, 11);
  return $v;
}
function _yks_norm_year($v): ?int {
  $v = trim((string)($v ?? ''));
  if ($v === '' or !preg_match('/^\d{4}$/', $v)) return null;
  $y = (int)$v;
  if ($y < 2000 || $y > 2100) return null;
  return $y;
}
function _yks_insert_log(string $pdfRel, ?string $pdfOrig, array $fields = []): ?int {
  global $DBCFG;
  $pdo = _yks_pdo();
  if (!$pdo) return null;
  _yks_ensure_table($pdo);
  $t = _yks_table_name((string)$DBCFG['table']);

  $full = _yks_norm_str($fields['full_name'] ?? null, 255);
  $tckn = _yks_norm_tckn($fields['tckn'] ?? null);
  $phone = _yks_norm_str($fields['phone'] ?? null, 32);
  $email = _yks_norm_str($fields['email'] ?? null, 255);
  $year  = _yks_norm_year($fields['exam_year'] ?? null);

  $ip = _yks_norm_str($_SERVER['REMOTE_ADDR'] ?? null, 45);
  $ua = _yks_norm_str($_SERVER['HTTP_USER_AGENT'] ?? null, 255);

  $stmt = $pdo->prepare("INSERT INTO `$t` (full_name,tckn,phone,email,exam_year,pdf_original,pdf_path,ip,user_agent)
                         VALUES (:full,:tckn,:phone,:email,:year,:porig,:ppath,:ip,:ua)");
  $stmt->execute([
    ':full' => $full,
    ':tckn' => $tckn,
    ':phone' => $phone,
    ':email' => $email,
    ':year' => $year,
    ':porig' => _yks_norm_str($pdfOrig, 255),
    ':ppath' => $pdfRel,
    ':ip' => $ip,
    ':ua' => $ua,
  ]);
  $id = (int)$pdo->lastInsertId();
  $_SESSION['pdflog_id'] = $id;
  $_SESSION['pdflog_pdf_path'] = $pdfRel;
  $_SESSION['pdflog_pdf_original'] = $pdfOrig;
  return $id;
}
function _yks_update_log(int $id, array $fields): bool {
  global $DBCFG;
  $pdo = _yks_pdo();
  if (!$pdo) return False;
  _yks_ensure_table($pdo);
  $t = _yks_table_name((string)$DBCFG['table']);

  $full = _yks_norm_str($fields['full_name'] ?? null, 255);
  $tckn = _yks_norm_tckn($fields['tckn'] ?? null);
  $phone = _yks_norm_str($fields['phone'] ?? null, 32);
  $email = _yks_norm_str($fields['email'] ?? null, 255);
  $year  = _yks_norm_year($fields['exam_year'] ?? null);

  $stmt = $pdo->prepare("UPDATE `$t` SET full_name=:full, tckn=:tckn, phone=:phone, email=:email, exam_year=:year WHERE id=:id");
  $stmt->execute([
    ':full' => $full,
    ':tckn' => $tckn,
    ':phone' => $phone,
    ':email' => $email,
    ':year' => $year,
    ':id' => $id,
  ]);
  return True;
}

// Kullanıcı bilgilerini (ad/soyad, tc, telefon...) sonradan güncellemek için:
if (isset($_GET['logsync']) && $_SERVER['REQUEST_METHOD'] === 'POST') {
  header('Content-Type: application/json; charset=utf-8');
  $id = (int)($_POST['log_id'] ?? ($_SESSION['pdflog_id'] ?? 0));
  if ($id <= 0) {
    _yks_json(['ok'=>false,'error'=>'log_id_yok']);
    exit;
  }
  try {
    $ok = _yks_update_log($id, $_POST);
    _yks_json(['ok'=>$ok, 'log_id'=>$id]);
  } catch (Throwable $e) {
    if (_yks_debug_enabled()) error_log('[YKS-PDFLOG][UPDATE] '.$e->getMessage());
    _yks_json(['ok'=>false,'error'=>'db_update_fail','detail'=> _yks_debug_enabled() ? $e->getMessage() : null]);
  }
  exit;
}


if ($_SERVER['REQUEST_METHOD'] === 'POST' && (($_POST['action'] ?? '') === 'clear_all_steps')) {
  unset(
    $_SESSION['step1'],
    $_SESSION['step2'],
    $_SESSION['step3'],
    $_SESSION['step4'],
    $_SESSION['step4_program'],
    $_SESSION['step5'],
    $_SESSION['pdflog_id'],
    $_SESSION['pdflog_pdf_path'],
    $_SESSION['pdflog_pdf_original']
  );

  header('Content-Type: application/json; charset=utf-8');
  echo json_encode(['ok' => true], JSON_UNESCAPED_UNICODE);
  exit;
}

if (isset($_GET['pdfparse']) && $_SERVER['REQUEST_METHOD'] === 'POST') {
  header('Content-Type: application/json; charset=utf-8');

  $resp = ['ok' => false];

  if (!isset($_FILES['pdf']) || empty($_FILES['pdf']['tmp_name'])) {
    $resp['error'] = 'pdf_yok';
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  $tmp = $_FILES['pdf']['tmp_name'];
  $origName = $_FILES['pdf']['name'] ?? 'osym.pdf';

  // === GÜVENLİ PDF KONTROLÜ ===
  // Tarayıcıdaki accept="application/pdf" tek başına güvenlik değildir.
  // Dosyayı kaydetmeden ÖNCE: upload hatası, uzantı, MIME ve gerçek PDF imzası kontrol edilir.
  $uploadErr = (int)($_FILES['pdf']['error'] ?? UPLOAD_ERR_NO_FILE);
  if ($uploadErr !== UPLOAD_ERR_OK) {
    $resp['error'] = 'dosya_yukleme_hatasi';
    $resp['code'] = $uploadErr;
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  if (!is_uploaded_file($tmp)) {
    $resp['error'] = 'gecersiz_yukleme';
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  $size = (int)($_FILES['pdf']['size'] ?? 0);
  $maxPdfSize = 25 * 1024 * 1024; // 25 MB
  if ($size <= 0 || $size > $maxPdfSize) {
    $resp['error'] = 'pdf_boyutu_gecersiz';
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  $ext = strtolower(pathinfo((string)$origName, PATHINFO_EXTENSION));
  if ($ext !== 'pdf') {
    $resp['error'] = 'sadece_pdf_yuklenebilir';
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  $mime = '';
  if (function_exists('finfo_open')) {
    $fi = @finfo_open(FILEINFO_MIME_TYPE);
    if ($fi) {
      $mime = (string)@finfo_file($fi, $tmp);
      @finfo_close($fi);
    }
  }
  if ($mime !== '' && !in_array($mime, ['application/pdf', 'application/x-pdf'], true)) {
    $resp['error'] = 'gercek_pdf_degil';
    if (_yks_debug_enabled()) $resp['mime'] = $mime;
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  $fh = @fopen($tmp, 'rb');
  $header = $fh ? (string)@fread($fh, 5) : '';
  if ($fh) @fclose($fh);
  if ($header !== '%PDF-') {
    $resp['error'] = 'gercek_pdf_degil';
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  // PDF'yi kalıcı olarak pfdx364 dizinine kaydet
  $saveDir = __DIR__ . DIRECTORY_SEPARATOR . $PDF_SAVE_DIRNAME;
  if (!is_dir($saveDir)) {
    @mkdir($saveDir, 0755, true);
  }
  if (!is_dir($saveDir) || !is_writable($saveDir)) {
    $resp['error'] = 'pfdx364_yazma_izni_yok';
    if (_yks_debug_enabled()) {
      $resp['detail'] = ['dir' => $saveDir, 'is_dir' => is_dir($saveDir), 'writable' => is_writable($saveDir)];
    }
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  $base = pathinfo((string)$origName, PATHINFO_FILENAME);
  $base = preg_replace('/[^A-Za-z0-9_\-]+/u', '_', (string)$base);
  if ($base === '' || $base === '_') $base = 'osym';
  $rand = bin2hex(random_bytes(4));
  $fname = date('Ymd_His') . '_' . $rand . '_' . $base . '.pdf';

  $absPdf = $saveDir . DIRECTORY_SEPARATOR . $fname;
  $relPdf = $PDF_SAVE_DIRNAME . '/' . $fname;

  if (!move_uploaded_file($tmp, $absPdf)) {
    $resp['error'] = 'move_uploaded_file_basarisiz';
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  // DB kaydı oluştur (alanlar boş olabilir; sonra logsync ile güncellenir)
  try {
    $logId = _yks_insert_log($relPdf, $origName, $_POST);
    if ($logId) {
      $resp['log_id'] = $logId;
      $resp['pdf_path'] = $relPdf;
    } else {
      $resp['log_id'] = null;
      $resp['pdf_path'] = $relPdf;
      $resp['db_warn'] = 'db_baglanti_yok';
    }
  } catch (Throwable $e) {
    if (_yks_debug_enabled()) error_log('[YKS-PDFLOG][INSERT] '.$e->getMessage());
    $resp['log_id'] = null;
    $resp['pdf_path'] = $relPdf;
    $resp['db_warn'] = 'db_insert_fail';
    if (_yks_debug_enabled()) $resp['db_detail'] = $e->getMessage();
  }

  // PDF metin okuma: hızlı yöntem.
  // 1) Normal PDF ise pdftotext ile anında okur.
  // 2) Taranmış/resim PDF ise ocrmypdf kullanmadan sadece ilk sayfayı PNG yapar ve direkt tesseract okur.
  // Bu yöntem ocrmypdf'ye göre çok daha hızlıdır.
  $runCmd = function(string $cmd): ?string {
    if (function_exists('shell_exec')) {
      $r = shell_exec($cmd);
      return is_string($r) ? $r : null;
    }
    if (function_exists('exec')) {
      $lines = [];
      $rc = 0;
      exec($cmd, $lines, $rc);
      return ($rc === 0) ? implode("\n", $lines) : null;
    }
    return null;
  };

  // pdftotext taranmış PDF'lerde bazen sadece form-feed (\f) döndürür.
  // trim() bunu her ortamda boş saymadığı için gerçek yazı/rakam var mı ayrıca kontrol ediyoruz.
  $hasUsefulText = function($text): bool {
    $text = preg_replace('/[\x00-\x1F\x7F]+/u', ' ', (string)$text);
    return preg_match('/[A-Za-zÇĞİÖŞÜçğıöşü0-9]{3,}/u', (string)$text) === 1;
  };

  // Hızlı OCR: sadece 1. sayfa + düşük DPI + psm 4.
  // ÖSYM sonuç PDF'i tek sayfalık olduğu için bütün sayfaları OCR yapmak gereksiz yavaşlatır.
  $fastTesseractText = function(string $pdfPath, int $dpi = 160, string $psm = '4') use ($runCmd): string {
    $ocrDir = rtrim(sys_get_temp_dir(), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . 'yks_fastocr_' . bin2hex(random_bytes(6));
    @mkdir($ocrDir, 0700, true);
    if (!is_dir($ocrDir) || !is_writable($ocrDir)) return '';

    $prefix = $ocrDir . DIRECTORY_SEPARATOR . 'page';

    // -f 1 -l 1: sadece ilk sayfa
    // -gray: daha küçük resim, daha hızlı OCR
    $runCmd('pdftoppm -f 1 -l 1 -r ' . (int)$dpi . ' -gray -png ' . escapeshellarg($pdfPath) . ' ' . escapeshellarg($prefix) . ' 2>/dev/null');

    $imgs = glob($ocrDir . DIRECTORY_SEPARATOR . 'page-*.png') ?: [];
    natsort($imgs);

    $text = '';
    $img = count($imgs) ? reset($imgs) : null;
    if ($img && is_file($img)) {
      $text = (string)$runCmd('tesseract ' . escapeshellarg($img) . ' stdout -l tur+eng --psm ' . escapeshellarg($psm) . ' 2>/dev/null');
      if (trim($text) === '') {
        $text = (string)$runCmd('tesseract ' . escapeshellarg($img) . ' stdout -l eng --psm ' . escapeshellarg($psm) . ' 2>/dev/null');
      }
    }

    foreach ($imgs as $one) @unlink($one);
    @rmdir($ocrDir);
    return trim($text);
  };

  $out = $runCmd('pdftotext -layout ' . escapeshellarg($absPdf) . ' - 2>/dev/null');
  $parseMethod = 'pdftotext';

  // Taranmış/resim PDF ise hızlı OCR'a düş.
  if (!$hasUsefulText($out)) {
    $parseMethod = 'tesseract_fast_160dpi_psm4';
    $out = $fastTesseractText($absPdf, 160, '4');
  }

  // Çok nadir durumda 160 DPI yetersiz kalırsa tek sefer 220 DPI yedek dene.
  if (!$hasUsefulText($out)) {
    $parseMethod = 'tesseract_fast_220dpi_psm4';
    $out = $fastTesseractText($absPdf, 220, '4');
  }

  if (!$hasUsefulText($out)) {
    $resp['error'] = 'pdf_ocr_ile_de_okunamadi';
    if (_yks_debug_enabled()) {
      $resp['detail'] = 'Sunucuda poppler-utils, tesseract-ocr veya tesseract-ocr-tur eksik olabilir.';
    }
    echo json_encode($resp, JSON_UNESCAPED_UNICODE);
    exit;
  }

  $resp['parse_method'] = $parseMethod;

  // Başlangıç response
  $resp['ok'] = true;
  if (isset($resp['log_id'])) { /* keep */ }

  // Aday bilgileri (TC, Ad Soyad, E-posta) - pdftotext çıktısından
  $auto_tckn = null;
  $auto_full = null;
  $auto_email = null;

  // TC Kimlik (11 hane)
  if (preg_match('/T\.?\s*C\.?\s*Kimlik\s*(?:No(?:su)?|Numarasi|Numarası)\s*[:\-]?\s*([0-9]{11})/iu', $out, $m)) {
    $auto_tckn = $m[1];
  } elseif (preg_match('/\b([0-9]{11})\b/u', $out, $m)) {
    // yedek: belgede geçen ilk 11 haneli sayı
    $auto_tckn = $m[1];
  }

  // Ad Soyad
  if (preg_match('/Ad[ıi]\s*(?:ve\s*)?Soyad[ıi]\s*[:\-]?\s*([^\r\n]+)/iu', $out, $m)) {
    $auto_full = trim($m[1]);
  } elseif (preg_match('/ADI\s*(?:VE\s*)?SOYADI\s*[:\-]?\s*([^\r\n]+)/iu', $out, $m)) {
    $auto_full = trim($m[1]);
  }
  if (!empty($auto_full)) {
    // satırda başka kolonlar varsa kırp
    $auto_full = preg_split('/\s{2,}/u', $auto_full)[0] ?? $auto_full;
    $auto_full = preg_split('/\s*(?:T\.?C\.?|TC\s*Kimlik|E-?Posta|Telefon)\b/iu', $auto_full)[0] ?? $auto_full;
    $auto_full = trim($auto_full);
  }

  // E-posta (varsa)
  if (preg_match('/([A-Z0-9._%+\-]+@[A-Z0-9.\-]+\.[A-Z]{2,})/i', $out, $m)) {
    $auto_email = trim($m[1]);
  }

  // Response'a ekle (JS setIfEmpty ile dolduracak)
  if (!empty($auto_tckn))  $resp['tckn'] = $auto_tckn;
  if (!empty($auto_full))  $resp['full_name'] = $auto_full;
  if (!empty($auto_email)) $resp['email'] = $auto_email;

  // DB kaydını da otomatik bilgilerle güncelle (kullanıcı boş bırakmışsa)
  if (!empty($resp['log_id'])) {
    try {
      $fields = $_POST;
      if (empty(trim((string)($fields['tckn'] ?? ''))) && !empty($auto_tckn)) $fields['tckn'] = $auto_tckn;
      if (empty(trim((string)($fields['full_name'] ?? ''))) && !empty($auto_full)) $fields['full_name'] = $auto_full;
      if (empty(trim((string)($fields['email'] ?? ''))) && !empty($auto_email)) $fields['email'] = $auto_email;
      _yks_update_log((int)$resp['log_id'], $fields);
    } catch (Throwable $e) {
      // sessiz geç
      if (_yks_debug_enabled()) error_log('[YKS-PDFLOG][AUTOUPDATE] '.$e->getMessage());
    }
  }

  
  // Puan tablosu satırlarında bazen farklı tire karakterleri (–, —, ‑, −) ve Türkçe harfler çıkabiliyor.
  // Özellikle "SÖZ / Y-SÖZ" gibi alanların kaçmaması için regex aramalarında normalize edilmiş kopya kullanıyoruz.
  $out_scores = $out;
  // Tire karakterlerini "-" yap
  $out_scores = str_replace(["\xE2\x80\x91", "\xE2\x80\x93", "\xE2\x80\x94", "\xE2\x88\x92", "‑", "–", "—", "−"], "-", $out_scores);
  // Türkçe harfleri ASCII'ye indir (SÖZ -> SOZ, DİL -> DIL vb.)
  $out_scores = strtr($out_scores, [
    'Ö'=>'O','ö'=>'o',
    'İ'=>'I','ı'=>'i',
    'Ş'=>'S','ş'=>'s',
    'Ğ'=>'G','ğ'=>'g',
    'Ü'=>'U','ü'=>'u',
    'Ç'=>'C','ç'=>'c',
  ]);

  $out_parse = preg_replace('/[^\S\r\n]+/u', ' ', $out_scores);
  $out_parse = preg_replace('/\r\n?|\r/u', "\n", (string)$out_parse);

  // OCR bazen 0 rakamını tek başına o/O olarak okur. Test doğru/yanlış sayıları için düzelt.
  $out_parse_tests = preg_replace('/(?<=\s)[oO](?=\s)/u', '0', (string)$out_parse);

  $setResp = function(string $key, $val) use (&$resp): void {
    $val = trim((string)($val ?? ''));
    if ($val === '') return;
    if (isset($resp[$key]) && trim((string)$resp[$key]) !== '') return;
    $resp[$key] = $val;
  };

  // Başlıktan sınav yılını yakala: "2024 Yükseköğretim..."
  if (preg_match('/\b(20[0-9]{2})\s+Yuksekogretim/iu', $out_parse, $m)) {
    $setResp('exam_year', $m[1]);
  }

  // Okul / OBP alanları
  if (preg_match('/Diploma\s+Notu.*?([0-9]{1,3}[,.][0-9]{1,5})\s+([0-9]{2,3}[,.][0-9]{1,5})\s+([0-9]{3,})\s+([0-9]{3,})\s+([0-9]{3,})\s+([A-Za-z0-9\-]+)/isu', $out_parse, $m)) {
    $setResp('diploma', $m[1]);
    $setResp('obp', $m[2]);
    $setResp('okul_kodu', $m[3]);
    $setResp('okul_tur_kodu', $m[4]);
    $setResp('alan_kodu', $m[5]);
    $dal = strtoupper(trim($m[6]));
    if ($dal === 'A') $dal = '-'; // OCR bazen '-' işaretini 'a' okuyabiliyor
    $setResp('dal_no', $dal);
  }

  // TYT doğru/yanlış sayıları
  if (preg_match('/TYT\s+TESTLERINDEKI.*?Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)/isu', $out_parse_tests, $m)) {
    $setResp('tyt_turkce_d', $m[1]); $setResp('tyt_turkce_y', $m[2]);
    $setResp('tyt_sosyal_d', $m[3]); $setResp('tyt_sosyal_y', $m[4]);
    $setResp('tyt_mat_d',    $m[5]); $setResp('tyt_mat_y',    $m[6]);
    $setResp('tyt_fen_d',    $m[7]); $setResp('tyt_fen_y',    $m[8]);
  }

  // AYT Türk Dili ve Edebiyatı - Sosyal Bilimler 1
  if (preg_match('/Turk\s+Dili\s+ve\s+Edebiyati\s+Tarih\s*-\s*1\s+Cografya\s*-\s*1\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)/isu', $out_parse_tests, $m)) {
    $setResp('ayt_tde_d',    $m[1]); $setResp('ayt_tde_y',    $m[2]);
    $setResp('ayt_tarih1_d', $m[3]); $setResp('ayt_tarih1_y', $m[4]);
    $setResp('ayt_cog1_d',   $m[5]); $setResp('ayt_cog1_y',   $m[6]);
  }

  // AYT Sosyal Bilimler 2
  if (preg_match('/Tarih\s*-\s*2\s+Cografya\s*-\s*2\s+Felsefe\s+Grubu\s+DKAB.*?Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)/isu', $out_parse_tests, $m)) {
    $setResp('ayt_tarih2_d',  $m[1]); $setResp('ayt_tarih2_y',  $m[2]);
    $setResp('ayt_cog2_d',    $m[3]); $setResp('ayt_cog2_y',    $m[4]);
    $setResp('ayt_felsefe_d', $m[5]); $setResp('ayt_felsefe_y', $m[6]);
    $setResp('ayt_dkab_d',    $m[7]); $setResp('ayt_dkab_y',    $m[8]);
  }

  // AYT Matematik - Fen Bilimleri
  if (preg_match('/Matematik.*?Fizik\s+Kimya\s+Biyoloji\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+Dogru\s+Yanlis\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)/isu', $out_parse_tests, $m)) {
    $setResp('ayt_mat_d',   $m[1]); $setResp('ayt_mat_y',   $m[2]);
    $setResp('ayt_fizik_d', $m[3]); $setResp('ayt_fizik_y', $m[4]);
    $setResp('ayt_kimya_d', $m[5]); $setResp('ayt_kimya_y', $m[6]);
    $setResp('ayt_biyo_d',  $m[7]); $setResp('ayt_biyo_y',  $m[8]);
  }

// TÜM PUAN TÜRLERİ İÇİN REGEX PATTERN
  // Format: PUAN_TURU  Puan  Sıra  Y-PUAN_TURU  Y-Puan  Y-Sıra
  
  // TYT (Y-TYT / YTYT)
  $re_tyt = '/(?:^|\n)\s*TYT\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})\s+Y\s*-?\s*TYT\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})(?:\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9}))?/u';
  if (preg_match($re_tyt, $out_scores, $m)) {
    $resp['sinav_tyt_puan'] = $m[1];
    $resp['sinav_tyt_sira'] = $m[2];
    $resp['yer_tyt_puan'] = $m[3];
    $resp['yer_tyt_sira'] = $m[4];
    if (isset($m[5], $m[6]) && $m[5] !== '' && $m[6] !== '') {
      $resp['ek_tyt_puan'] = $m[5];
      $resp['ek_tyt_sira'] = $m[6];
    }

  }

  // SAY (Y-SAY / YSAY)
  $re_say = '/(?:^|\n)\s*SAY\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})\s+Y\s*-?\s*SAY\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})(?:\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9}))?/u';
  if (preg_match($re_say, $out_scores, $m)) {
    $resp['sinav_say_puan'] = $m[1];
    $resp['sinav_say_sira'] = $m[2];
    $resp['yer_say_puan'] = $m[3];
    $resp['yer_say_sira'] = $m[4];
    if (isset($m[5], $m[6]) && $m[5] !== '' && $m[6] !== '') {
      $resp['ek_say_puan'] = $m[5];
      $resp['ek_say_sira'] = $m[6];
    }

  }

  // SÖZ (Y-SÖZ / YSÖZ)
  // Not: Bazı PDF'lerde "Y‑SÖZ" gibi farklı tire karakterleri veya "SÖZ" harfleri bozulabiliyor.
  // Bu yüzden normalize edilmiş $out_scores üzerinde ASCII (SOZ) ile arıyoruz.
  $re_soz = '/(?:^|\n)\s*SOZ\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})\s+Y\s*-?\s*SOZ\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})' .
            '(?:\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9}))?/u';
  if (preg_match($re_soz, $out_scores, $m)) {
    $resp['sinav_soz_puan'] = $m[1];
    $resp['sinav_soz_sira'] = $m[2];
    $resp['yer_soz_puan'] = $m[3];
    $resp['yer_soz_sira'] = $m[4];
    if (isset($m[5], $m[6]) && $m[5] !== '' && $m[6] !== '') {
      $resp['ek_soz_puan'] = $m[5];
      $resp['ek_soz_sira'] = $m[6];
    }

  }

  // EA (Y-EA / YEA)
  $re_ea = '/(?:^|\n)\s*EA\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})\s+Y\s*-?\s*EA\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})(?:\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9}))?/u';
  if (preg_match($re_ea, $out_scores, $m)) {
    $resp['sinav_ea_puan'] = $m[1];
    $resp['sinav_ea_sira'] = $m[2];
    $resp['yer_ea_puan'] = $m[3];
    $resp['yer_ea_sira'] = $m[4];
    if (isset($m[5], $m[6]) && $m[5] !== '' && $m[6] !== '') {
      $resp['ek_ea_puan'] = $m[5];
      $resp['ek_ea_sira'] = $m[6];
    }

  }

  // DİL (Y-DİL / YDİL)
  $re_dil = '/(?:^|\n)\s*DIL\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})\s+Y\s*-?\s*DIL\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9})(?:\s+([0-9]{2,3}[,\.][0-9]+)\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{1,9}))?/u';
  if (preg_match($re_dil, $out_scores, $m)) {
    $resp['sinav_dil_puan'] = $m[1];
    $resp['sinav_dil_sira'] = $m[2];
    $resp['yer_dil_puan'] = $m[3];
    $resp['yer_dil_sira'] = $m[4];
    if (isset($m[5], $m[6]) && $m[5] !== '' && $m[6] !== '') {
      $resp['ek_dil_puan'] = $m[5];
      $resp['ek_dil_sira'] = $m[6];
    }

  }

  // OCR çıktı düzeni tabloyu bozarsa puan satırlarını sırasına göre yakala.
  $normScoreVal = function(string $v): string {
    $v = trim(str_replace(' ', '', $v));
    // OCR bazen 215,92920 yerine 21592920 okuyabilir.
    if (preg_match('/^[0-9]{8}$/', $v)) {
      return substr($v, 0, 3) . ',' . substr($v, 3);
    }
    return $v;
  };
  $normRankVal = function(string $v): string {
    return trim(str_replace([' ', '|'], '', $v));
  };
  $extractScorePairs = function(string $line) use ($normScoreVal, $normRankVal): array {
    $line = str_replace(['|', '¦'], ' ', $line);
    $pairs = [];
    if (preg_match_all('/\b([0-9]{2,3}[,.][0-9]{3,5}|[0-9]{8})\b\s+([0-9]{1,3}(?:\.[0-9]{3})+|[0-9]{5,9})\b/u', $line, $mm, PREG_SET_ORDER)) {
      foreach ($mm as $one) {
        $pairs[] = [$normScoreVal($one[1]), $normRankVal($one[2])];
      }
    }
    return $pairs;
  };

  $scoreRows = [];
  $inScoreSection = false;
  foreach (preg_split('/\n+/', $out_parse) as $line) {
    $line = trim((string)$line);
    if ($line === '') continue;
    if (preg_match('/SINAV\s+PUANLARI|YERLESTIRME\s+PUANLARI/iu', $line)) {
      $inScoreSection = true;
      continue;
    }
    if ($inScoreSection && preg_match('/KILAVUZUN|BELGENIN\s+ASLINA|SONUC\s+BELGESI/iu', $line)) {
      break;
    }
    if (!$inScoreSection) continue;

    $pairs = $extractScorePairs($line);
    if (count($pairs) >= 2) {
      $scoreRows[] = $pairs;
    }
  }

  if (count($scoreRows) >= 3) {
    $types = ['tyt','say','soz','ea','dil'];
    foreach ($types as $idx => $type) {
      if (!isset($scoreRows[$idx])) continue;
      $pairs = $scoreRows[$idx];
      if (isset($pairs[0])) { $setResp("sinav_{$type}_puan", $pairs[0][0]); $setResp("sinav_{$type}_sira", $pairs[0][1]); }
      if (isset($pairs[1])) { $setResp("yer_{$type}_puan",   $pairs[1][0]); $setResp("yer_{$type}_sira",   $pairs[1][1]); }
      if (isset($pairs[2])) { $setResp("ek_{$type}_puan",    $pairs[2][0]); $setResp("ek_{$type}_sira",    $pairs[2][1]); }
    }
  }

  // Yerleşme durumu kontrolü
  $searchStr = "Kılavuzun 4.2. maddesi gereğince, yerleştirme puanlarınızın";
  if (mb_strpos($out, $searchStr) !== false || preg_match('/KILAVUZUN\s+4\.2\..*?OBP\s+katsayilari\s+yariya/isu', $out_parse)) {
    $resp['last_year_placement'] = 'yerlesti';
  } else {
    $resp['last_year_placement'] = 'yerlesmedi';
  }

  if (_yks_debug_enabled()) {
    $filled = [];
    foreach ($resp as $k => $v) {
      if (!in_array($k, ['ok','log_id','pdf_path','ocr_pdf_path','parse_method'], true) && trim((string)$v) !== '') $filled[] = $k;
    }
    $resp['debug_filled_count'] = count($filled);
    $resp['debug_filled_keys'] = $filled;
    $resp['debug_text_sample'] = mb_substr(preg_replace('/\s+/u', ' ', (string)$out), 0, 1800);
  }

  echo json_encode($resp, JSON_UNESCAPED_UNICODE);
  exit;
}

header('Content-Type: text/html; charset=utf-8');
?>
<!doctype html>
<html lang="tr">
<head>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1345582547235607"
     crossorigin="anonymous"></script>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>Tercih Robotu • YKS Adım 1</title>
  <link rel="stylesheet" href="assets/style.css?v=1" />

  <style>
    .opt{font-size:.85em;opacity:.75;font-weight:600}

/* PDF üst bar (yatay) */
#pdfHintArea.pdf-hint-row{
  display:flex;
  align-items:center;
  justify-content:flex-start;
  gap:12px;
  width:100%;
  flex-wrap:wrap;
}
#pdfHintArea .pdf-action-buttons{
  display:flex;
  align-items:center;
  gap:10px;
  flex-wrap:wrap;
}
#pdfHintArea .pdf-arrow{
  width:auto;
  margin:0;
  transform:none;
  justify-content:center;
  align-items:center;
  animation: pdfArrowSlide 1.05s ease-in-out infinite;
}
#pdfHintArea .down-arrow{
  animation:none;
  transform: rotate(-90deg);
}
@keyframes pdfArrowSlide{
  0%,100%{ transform: translateX(0); opacity:1; }
  50%{ transform: translateX(10px); opacity:.98; }
}



/* Mobil: ok + PDF yükleme butonu yan yana kalsın */
@media (max-width: 640px){
  #pdfHintArea.pdf-hint-row{
    display:grid;
    grid-template-columns:auto 1fr;
    grid-template-rows:auto auto;
    align-items:center;
    justify-content:stretch;
    gap:10px 6px;
  }
  #pdfHintArea .pdf-hint-text{
    grid-column:1 / -1;
    width:100%;
  }
  #pdfHintArea .pdf-arrow{
    grid-column:1;
    grid-row:2;
    justify-content:flex-start;
    align-self:flex-start;
    position:relative;
    left:-8px;
    top:-6px;
  }
  #pdfHintArea .pdf-action-buttons{
    grid-column:2;
    grid-row:2;
    justify-content:flex-start;
    width:100%;
  }
}


/* PDF ok animasyonu */
.pdf-arrow{
  width:100%;
  display:flex;
  justify-content:center;
  margin-bottom:12px; /* butona değmesin */
  transform: translateX(-1px); /* 5-6 adım sola */
  display:flex;
  justify-content:center;
  align-items:center;
  pointer-events:none;
  user-select:none;
}
.down-arrow{
    display:block;
  margin:0 auto;
width:56px;
  height:56px;
  filter: drop-shadow(0 10px 18px rgba(0,0,0,.28));
  animation: pdfArrowBounce 1.05s ease-in-out infinite;
}
@keyframes pdfArrowBounce{
  0%,100%{ transform: translateY(0) scale(1); opacity:1; }
  50%{ transform: translateY(10px) scale(1.03); opacity:.98; }
}
  
    /* PDF yüklendi durumu */
    .pdf-done{
      width:100%;
      max-width:360px;
      /* Devam Et butonundan biraz ayrışsın */
      margin:10px auto 14px;
      padding:12px 12px;
      border-radius:16px;
      border:1px solid rgba(255,255,255,.18);
      background:rgba(34,197,94,.10);
      box-shadow:0 10px 30px rgba(0,0,0,.18);
      display:flex;
      flex-direction:column;
      align-items:center;
      gap:10px;
      text-align:center;
    }
    .pdf-done .muted{opacity:.85;font-size:.92em}
    .checkmark{width:56px;height:56px;display:block;filter:drop-shadow(0 8px 18px rgba(0,0,0,.18));}
    .checkmark__circle{stroke:#22c55e;stroke-width:4;stroke-dasharray:166;stroke-dashoffset:166;animation:pdfStroke .6s ease-out forwards;}
    .checkmark__check{stroke:#22c55e;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:48;stroke-dashoffset:48;animation:pdfStroke .35s .55s ease-out forwards;}
    @keyframes pdfStroke{to{stroke-dashoffset:0}}
    @keyframes pdfPop{0%{transform:scale(.92)} 60%{transform:scale(1.05)} 100%{transform:scale(1)}}
    .checkmark-wrap{animation:pdfPop .6s ease-out .1s both;}
  
    /* Puanlar & Başarı Sıraları: her metin kutusu üst başlık */
    .scoreGrid .scoreItem{display:flex;flex-direction:column;gap:6px;min-width:0}
    .scoreGrid .scoreTitle{font-weight:700;font-size:13px;line-height:1.15}
    .scoreGrid .scoreItem input{width:100%}

	
/* Sayfanın ortası */
.logo-center{
  width:100%;
  display:flex;
  justify-content:center;
}

/* Logo alanı */
.logo-wrap{
  position:relative;
  display:inline-block;
}

/* Logo banner gibi büyümesin */
.logo{
  display:block;
  width:320px;     /* istersen 280-360 arası */
  max-width:90vw;
  height:auto;
}

/* Kalp boyutu tek yerden */
:root{
  --heart-size: 80px; /* daha ufak istiyorsan 70px yap */
}

/* Kalp rozeti */
.heart-badge{
  position:absolute;
  left: 62%;   /* sola almak için 55% deneyebilirsin */
  top: 58%;
  width: var(--heart-size);
  height: var(--heart-size);
  transform: translate(-50%, -50%) rotate(-12deg); /* hafif sola yatık */
  z-index: 10;
}

/* SVG kalp */
.heart-svg{
  width:100%;
  height:100%;
  display:block;
  filter: drop-shadow(0 10px 18px rgba(0,0,0,.25));
}

.heart-svg path{
  fill:#ff2d55;
}

/* Yazı kesin görünsün */
.heart-text{
  position:absolute;
  inset:0;
  display:flex;
  align-items:center;
  justify-content:center;
  text-align:center;

  color:#fff;
  font-weight:800;
  line-height:1.05;
  letter-spacing:.2px;
  font-family:"Trebuchet MS","Segoe UI",Arial,sans-serif;
  font-size: 13px;

  text-shadow:0 2px 10px rgba(0,0,0,.35);
  z-index: 20;
  pointer-events:none;
}





/* Mobil: TYT/AYT test satırları dar ekranda alt alta hizalansın */
@media (max-width: 640px){
  details.section .tableHead{display:none !important;}
  details.section .content .row{
    display:grid !important;
    grid-template-columns:1fr !important;
    gap:10px !important;
    align-items:stretch !important;
  }
  details.section .content .row .mini{min-width:0;}
  details.section .content .row .mini label{
    display:block;
    margin:0 0 6px;
    font-weight:800;
    font-size:12.5px;
    line-height:1.1;
  }
  details.section .content .row .mini input{
    width:100% !important;
  }
  details.section .content .row .net{
    width:100% !important;
    text-align:left !important;
    justify-self:stretch !important;
  }
}


/* === Daha belirgin metin kutuları (override) === */
#yksForm input:not([type="file"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]),
#yksForm select,
#yksForm textarea{
  -webkit-appearance:none;
  appearance:none;
  width:100%;
  box-sizing:border-box;
  background:#fff;
  border:2px solid rgba(0,0,0,.28);
  border-radius:14px;
  padding:11px 12px;
  font-size:15px;
  font-weight:600;
  line-height:1.2;
  box-shadow: 0 1px 0 rgba(0,0,0,.05), 0 8px 18px rgba(0,0,0,.06);
  transition: border-color .15s ease, box-shadow .15s ease;
}

#yksForm input::placeholder,
#yksForm textarea::placeholder{
  color: rgba(0,0,0,.45);
  font-weight:500;
}

#yksForm input:focus,
#yksForm select:focus,
#yksForm textarea:focus{
  outline:none;
  border-color: rgba(0,0,0,.55);
  box-shadow: 0 0 0 4px rgba(255, 210, 80, .35), 0 10px 22px rgba(0,0,0,.10);
}

#yksForm input:disabled,
#yksForm select:disabled,
#yksForm textarea:disabled{
  opacity:.72;
  background: rgba(0,0,0,.03);
  cursor:not-allowed;
}

/* Doğru/Yanlış mini kutular: düzen bozulmasın, daha net görünsün */
details.section .content .row .mini input{
  text-align:center;
  padding:10px 8px;
}

@media (max-width: 640px){
  #yksForm input:not([type="file"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]),
  #yksForm select,
  #yksForm textarea{
    font-size:16px; /* mobilde okunurluk */
  }
}



/* === KVKK / Koşullar Kilidi === */
.consent-box{
  background:#fff;
  border:2px solid rgba(0,0,0,.12);
  border-radius:16px;
  padding:14px 14px;
  margin:14px 0 10px;
}
.consent-check{
  display:flex;
  gap:10px;
  align-items:flex-start;
  cursor:pointer;
  user-select:none;
}
.consent-check input{
  margin-top:4px;
  transform:scale(1.1);
}
.legal-link{
  text-decoration:underline;
  font-weight:800;
}
.consent-hint{
  margin-top:8px;
  font-size:13px;
  opacity:.85;
}

/* donuk görünüm */
#yksLockSet:disabled{
  opacity:.72;
  filter:grayscale(0.35);
}
#yksForm input:disabled,
#yksForm select:disabled,
#yksForm textarea:disabled{
  background:#f2f2f2 !important;
  cursor:not-allowed !important;
}
label#pdfUploadLabel.disabled{
  opacity:.6;
  filter:grayscale(1);
  pointer-events:none;
}
button:disabled{
  opacity:.65;
  cursor:not-allowed;
}

/* === Modal === */
body.modal-open{ overflow:hidden; }
.modal-overlay{
  position:fixed;
  inset:0;
  background:rgba(0,0,0,.55);
  display:flex;
  align-items:center;
  justify-content:center;
  padding:18px;
  z-index:99999;
}
.modal-overlay[hidden]{ display:none !important; }
.modal-overlay[aria-hidden="true"]{ display:none !important; }
.modal{
  width:min(920px, 96vw);
  max-height:86vh;
  background:#fff;
  border-radius:18px;
  box-shadow:0 20px 60px rgba(0,0,0,.35);
  overflow:hidden;
}
.modal-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding:12px 14px;
  border-bottom:1px solid rgba(0,0,0,.08);
}
.modal-title{
  font-size:16px;
  font-weight:900;
}
.modal-close{
  border:0;
  background:transparent;
  font-size:18px;
  cursor:pointer;
  padding:8px 10px;
  border-radius:10px;
}
.modal-close:hover{ background:rgba(0,0,0,.06); }
.modal-body{
  padding:14px 16px 18px;
  overflow:auto;
  max-height:calc(86vh - 52px);
  line-height:1.55;
}
.legal-pre{
  white-space:pre-wrap;
  word-break:break-word;
  margin:0;
  font-family:inherit;
  font-size:14px;
}

</style>





<style>
/* === PDF OCR yükleniyor uyarısı === */
#pdfLoadingOverlay{
  position:fixed;
  inset:0;
  z-index:9999999;
  display:none;
  align-items:center;
  justify-content:center;
  padding:18px;
  background:rgba(0,0,0,.62);
}
#pdfLoadingOverlay .pdf-loading-box{
  width:min(460px, 94vw);
  background:#fff;
  color:#111;
  border-radius:20px;
  padding:22px 20px;
  box-shadow:0 24px 70px rgba(0,0,0,.35);
  text-align:center;
  border:1px solid rgba(0,0,0,.08);
}
#pdfLoadingOverlay .pdf-loader{
  width:54px;
  height:54px;
  margin:0 auto 14px;
  border-radius:50%;
  border:6px solid rgba(0,0,0,.12);
  border-top-color:#111;
  animation:pdfSpin .85s linear infinite;
}
@keyframes pdfSpin{to{transform:rotate(360deg)}}
#pdfLoadingOverlay h3{
  margin:0 0 8px;
  font-size:20px;
  font-weight:900;
}
#pdfLoadingOverlay p{
  margin:7px 0;
  line-height:1.45;
  font-size:14px;
}
#pdfLoadingOverlay .pdf-loading-warn{
  background:rgba(255,210,80,.45);
  border:1px dashed rgba(0,0,0,.25);
  border-radius:14px;
  padding:10px;
  font-weight:800;
}
#pdfLoadingOverlay .pdf-loading-file{
  word-break:break-word;
  font-size:13px;
  opacity:.82;
}
#pdfLoadingOverlay .pdf-loading-time{
  font-weight:900;
}
</style>

</head>
<body>
<div id="pdfLoadingOverlay" aria-hidden="true">
  <div class="pdf-loading-box" role="status" aria-live="polite">
    <div class="pdf-loader" aria-hidden="true"></div>
    <h3>PDF okunuyor, lütfen bekleyin...</h3>
    <p class="pdf-loading-warn">Bu belge taranmış/resim PDF ise OCR yapılır. İşlem yaklaşık <b>5-25 saniye</b> sürebilir.</p>
    <p>Sayfayı kapatmayın, geri tuşuna basmayın.</p>
    <p class="pdf-loading-time">Geçen süre: <span id="pdfLoadingSeconds">0</span> sn</p>
    <p class="pdf-loading-file" id="pdfLoadingFile"></p>
  </div>
</div>

<div class="logo-center">



    </div>
  </div>
</div>


  <div class="wrap">
    <div class="topbar">
      <div class="title">
	  	
   

    
        
      </div>
      <div class="actions"></div>
    </div>

    <div class="card">
      <div class="progress" style="display:flex;align-items:center;justify-content:flex-start;position:relative;">
        <div class="left" style="position:absolute;left:12px;top:50%;transform:translateY(-50%);">
        </div>
          <!-- === KVKK / Kullanım Koşulları Onayı (kilit) === -->
      <div id="consentBox" class="consent-box" role="region" aria-label="Aydınlatma ve kullanım koşulları onayı">
        		      <b> ⚠️ Devam etmek için aşağıdaki kutuyu işaretleyin. İşaretlenene kadar PDF yükleme ve tüm alanlar pasiftir. </b><br><br>
		<label class="consent-check">
          <input type="checkbox" id="consentAgree" />
		  

          <span>
            <a href="#" id="openAydin" class="legal-link">Aydınlatma Metni</a> ve
            <a href="#" id="openKosul" class="legal-link">Kullanım Koşulları</a>’nı okudum, kabul ediyorum.
          </span>
        </label>

      </div>
        <div class="actions" style="display:flex;flex-direction:column;align-items:stretch;gap:8px;width:100%;">
          <div style="width:100%;text-align:left;">
            <span class="pill" id="pdfStatus" style="display:none;margin:0 0 8px 0;"></span>
            <div id="pdfHintArea" class="pdf-hint-row">
            <div class="sub pdf-hint-text" style="display:inline-block;font-weight:800;opacity:1;font-size:14px;line-height:1.3;padding:10px 12px;border:1px dashed rgba(0,0,0,.25);border-radius:14px;background:rgba(255, 210, 80, .45);">
              ÖSYM Sonuç Belgenizi Pdf Olarak Yükleyin
            </div>

            <div class="pdf-arrow" aria-hidden="true">
  <svg class="down-arrow" viewBox="0 0 64 64" focusable="false" aria-hidden="true">
    <defs>
      <linearGradient id="pdfArrowGrad" x1="0" y1="0" x2="1" y2="1">
        <stop offset="0%" stop-color="#7c3aed"/>
        <stop offset="100%" stop-color="#06b6d4"/>
      </linearGradient>
    </defs>
    <path d="M32 10v28" fill="none" stroke="url(#pdfArrowGrad)" stroke-width="6" stroke-linecap="round"/>
    <path d="M18 30l14 14 14-14" fill="none" stroke="url(#pdfArrowGrad)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
    <path d="M18 42l14 14 14-14" fill="none" stroke="url(#pdfArrowGrad)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round" opacity=".55"/>
  </svg>
</div>



            <div class="pdf-action-buttons">
              <label id="pdfUploadLabel" class="btn success disabled" aria-disabled="true" style="display:inline-flex;align-items:center;gap:8px;">
                📄 PDF YÜKLEMEK İÇİN TIKLAYIN
                <input id="osymPdf" type="file" accept="application/pdf,.pdf" style="display:none" disabled>
              </label>
              <button class="btn primary" type="submit" form="yksForm" disabled>Devam Et</button>
              <button class="btn danger" type="button" id="btnClear" disabled>Temizle</button>
              <a class="btn" href="/">Anasayfa</a>
            </div>
            </div>
            <div id="pdfDoneArea" class="pdf-done" style="display:none;">
              <div class="checkmark-wrap" aria-hidden="true">
                <svg class="checkmark" viewBox="0 0 52 52" focusable="false" aria-hidden="true">
                  <circle class="checkmark__circle" cx="26" cy="26" r="25" fill="none"></circle>
                  <path class="checkmark__check" fill="none" d="M14 27l7 7 17-17"></path>
                </svg>
              </div>
              <div class="pdf-done-text">
  <b>✅ PDF okundu, bilgiler forma aktarıldı!</b> <span id="pdfNameInline">😉</span><br>

  
     <br>  📝 2. adıma geçmeden önce bilgilerini aşağıdaki formdan kontrol edebilirsin.
<br>
			
			<br>
                <span class="muted">2. adıma geçmek için <b>Devam Et</b> butonuna tıkla.</span>
           👉

			 </div>
            </div>

 
            <div class="pdf-headings" style="text-align:center;margin-top:12px;">
            
               <h2>ÖSYM 2026 - YKS Sonuçları (Yerleştirme Puanları Dahil)</h2>
            </div>

          </div>
        </div>

      </div>
      
   

<form id="yksForm" autocomplete="on">
      <fieldset id="yksLockSet" disabled>
        <div class="grid">

          <!-- Basic -->
          <div class="field half">
            <label>Ad Soyad <span class="req">*</span></label>
            <input type="text" name="full_name" placeholder="Ad Soyad" required />
          </div>
          
          <div class="field half">
            <label>E-posta <span class="opt">(İsteğe Bağlı)</span></label>
            <input type="email" name="email" placeholder="ornek@mail.com" />
          </div>

          <div class="field half">
            <label>Telefon <span class="opt">(İsteğe Bağlı)</span></label>
            <input type="text" name="phone" inputmode="tel" placeholder="05xx xxx xx xx" pattern="[0-9+\s()\-]{7,20}" />
          </div>


          <div class="field half">
            <label>T.C. Kimlik No</label>
            <input type="text" name="tckn" inputmode="numeric" pattern="\d{11}" placeholder="11 haneli" />
          </div>
          <div class="field half" style="grid-column:1 / -1;">
            <label>Sınav Yılı</label>
            <input type="number" name="exam_year" min="2000" max="2100" step="1" placeholder="Örn: 2025" />
          </div>

          <!-- TYT -->
          <details class="section">
            <summary>
              <div>
                <h2>TYT Testleri</h2>

              </div>
              <div class="pill">TYT Net: <span data-section-net="tyt">0.00</span></div>
            </summary>
            <div class="content">
              <div class="tableHead">
                <div>Ders</div><div>Doğru</div><div>Yanlış</div><div style="text-align:center;">Net</div>
              </div>

              <div class="row">
                <div class="mini"><label>Türkçe</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="50" step="1" name="tyt_turkce_d" data-net="tyt_turkce" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="50" step="1" name="tyt_turkce_y" data-net="tyt_turkce" /></div>
                <div class="net" data-net-out="tyt_turkce">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Sosyal Bilimler</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="50" step="1" name="tyt_sosyal_d" data-net="tyt_sosyal" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="50" step="1" name="tyt_sosyal_y" data-net="tyt_sosyal" /></div>
                <div class="net" data-net-out="tyt_sosyal">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Temel Matematik</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="50" step="1" name="tyt_mat_d" data-net="tyt_mat" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="50" step="1" name="tyt_mat_y" data-net="tyt_mat" /></div>
                <div class="net" data-net-out="tyt_mat">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Fen Bilimleri</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="50" step="1" name="tyt_fen_d" data-net="tyt_fen" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="50" step="1" name="tyt_fen_y" data-net="tyt_fen" /></div>
                <div class="net" data-net-out="tyt_fen">0.00</div>
              </div>
            </div>
          </details>

          <!-- AYT -->
          <details class="section">
            <summary>
              <div>
                <h2>AYT Testleri</h2>

              </div>
              <div class="pill">AYT Net: <span data-section-net="ayt">0.00</span></div>
            </summary>
            <div class="content">
              <div class="divider"></div>
              <p class="hint" style="margin:0 0 10px;"><b>TDE – Sosyal Bilimler 1</b></p>

              <div class="tableHead">
                <div>Ders</div><div>Doğru</div><div>Yanlış</div><div style="text-align:center;">Net</div>
              </div>

              <div class="row">
                <div class="mini"><label>TDE</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_tde_d" data-net="ayt_tde" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_tde_y" data-net="ayt_tde" /></div>
                <div class="net" data-net-out="ayt_tde">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Tarih-1</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_tarih1_d" data-net="ayt_tarih1" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_tarih1_y" data-net="ayt_tarih1" /></div>
                <div class="net" data-net-out="ayt_tarih1">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Coğrafya-1</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_cog1_d" data-net="ayt_cog1" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_cog1_y" data-net="ayt_cog1" /></div>
                <div class="net" data-net-out="ayt_cog1">0.00</div>
              </div>

              <div class="divider"></div>
              <p class="hint" style="margin:0 0 10px;"><b>Sosyal Bilimler 2</b></p>

              <div class="row">
                <div class="mini"><label>Tarih-2</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_tarih2_d" data-net="ayt_tarih2" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_tarih2_y" data-net="ayt_tarih2" /></div>
                <div class="net" data-net-out="ayt_tarih2">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Coğrafya-2</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_cog2_d" data-net="ayt_cog2" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_cog2_y" data-net="ayt_cog2" /></div>
                <div class="net" data-net-out="ayt_cog2">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Felsefe Grubu</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_felsefe_d" data-net="ayt_felsefe" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_felsefe_y" data-net="ayt_felsefe" /></div>
                <div class="net" data-net-out="ayt_felsefe">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>DKAB / İlave</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_dkab_d" data-net="ayt_dkab" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_dkab_y" data-net="ayt_dkab" /></div>
                <div class="net" data-net-out="ayt_dkab">0.00</div>
              </div>

              <div class="divider"></div>
              <p class="hint" style="margin:0 0 10px;"><b>Matematik – Fen Bilimleri</b></p>

              <div class="row">
                <div class="mini"><label>Matematik</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_mat_d" data-net="ayt_mat" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_mat_y" data-net="ayt_mat" /></div>
                <div class="net" data-net-out="ayt_mat">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Fizik</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_fizik_d" data-net="ayt_fizik" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_fizik_y" data-net="ayt_fizik" /></div>
                <div class="net" data-net-out="ayt_fizik">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Kimya</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_kimya_d" data-net="ayt_kimya" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_kimya_y" data-net="ayt_kimya" /></div>
                <div class="net" data-net-out="ayt_kimya">0.00</div>
              </div>

              <div class="row">
                <div class="mini"><label>Biyoloji</label></div>
                <div class="mini"><label>Doğru</label><input type="number" min="0" max="80" step="1" name="ayt_biyo_d" data-net="ayt_biyo" /></div>
                <div class="mini"><label>Yanlış</label><input type="number" min="0" max="80" step="1" name="ayt_biyo_y" data-net="ayt_biyo" /></div>
                <div class="net" data-net-out="ayt_biyo">0.00</div>
              </div>

            </div>
          </details>

          <!-- School / OBP -->
          <details class="section">
            <summary>
              <div>
                <h2>Okul / OBP Bilgileri</h2>

              </div>
              <div class="pill">OBP / Kodlar</div>
            </summary>
            <div class="content">
              <div class="grid">
                <div class="field third">
                  <label>Diploma Notu</label>
                  <input type="number" min="0" max="100" step="0.00001" name="diploma" placeholder="Örn: 92.88430" />
                </div>
                <div class="field third">
                  <label>OBP</label>
                  <input type="number" min="0" max="600" step="0.00001" name="obp" placeholder="Örn: 464.42150" />
                </div>
                <div class="field third">
                  <label>Okul Kodu</label>
                  <input type="text" name="okul_kodu" placeholder="Örn: 520646" />
                </div>
                <div class="field third">
                  <label>Okul Türü Kodu</label>
                  <input type="text" name="okul_tur_kodu" placeholder="Örn: 11058" />
                </div>
                <div class="field third">
                  <label>Alan Kodu</label>
                  <input type="text" name="alan_kodu" placeholder="Örn: 6303" />
                </div>
                <div class="field third">
                  <label>Dal No</label>
                  <input type="text" name="dal_no" placeholder="Örn: -" />
                </div>
              </div>
            </div>
          </details>

          <!-- Scores -->
          <details class="section" open>
            <summary>
              <div>
                <h2>Puanlar & Başarı Sıraları</h2>
                <p class="hint">Sınav /  TYT - AYT Yerleştirme / Ek Puanlı Yerleştirme.</p>
              </div>
              <div class="pill">TYT • SAY • SÖZ • EA • DİL</div>
            </summary>
            <div class="content">

              <div class="scoreRow">
                <div>
                  <b>TYT (Ham)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="sinav_tyt_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="sinav_tyt_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YTYT (Yerleştirme)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="yer_tyt_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="yer_tyt_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YTYT Ek Puan</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">YTYT Ek Puan : 👇</div>
                      <input type="number" step="0.00001" name="ek_tyt_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">YTYT Ek Puan Sırası : 👇</div>
                      <input type="text" name="ek_tyt_sira" placeholder="" />
                    </div>
                  </div>
                </div>
              </div>

              <div class="scoreRow">
                <div>
                  <b>SAY (Ham)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="sinav_say_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="sinav_say_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YSAY (Yerleştirme)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="yer_say_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="yer_say_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YSAY Ek Puan</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">YSAY Ek Puan : 👇</div>
                      <input type="number" step="0.00001" name="ek_say_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">YSAY Ek Puan Sırası : 👇</div>
                      <input type="text" name="ek_say_sira" placeholder="" />
                    </div>
                  </div>
                </div>
              </div>

              <div class="scoreRow">
                <div>
                  <b>SÖZ (Ham)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="sinav_soz_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="sinav_soz_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YSÖZ (Yerleştirme)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="yer_soz_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="yer_soz_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YSÖZ Ek Puan</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">YSÖZ Ek Puan : 👇</div>
                      <input type="number" step="0.00001" name="ek_soz_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">YSÖZ Ek Puan Sırası : 👇</div>
                      <input type="text" name="ek_soz_sira" placeholder="" />
                    </div>
                  </div>
                </div>
              </div>

              <div class="scoreRow">
                <div>
                  <b>EA (Ham)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="sinav_ea_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="sinav_ea_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YEA (Yerleştirme)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="yer_ea_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="yer_ea_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YEA Ek Puan</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">YEA Ek Puan : 👇</div>
                      <input type="number" step="0.00001" name="ek_ea_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">YEA Ek Puan Sırası : 👇</div>
                      <input type="text" name="ek_ea_sira" placeholder="" />
                    </div>
                  </div>
                </div>
              </div>

              <div class="scoreRow">
                <div>
                  <b>DİL (Ham)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="sinav_dil_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="sinav_dil_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YDİL (Yerleştirme)</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">Puan : 👇</div>
                      <input type="number" step="0.00001" name="yer_dil_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">Başarı Sırası : 👇</div>
                      <input type="text" name="yer_dil_sira" placeholder="" />
                    </div>
                  </div>
                </div>
                <div>
                  <b>YDİL Ek Puan</b>
                  <div class="scoreGrid">
                    <div class="scoreItem">
                      <div class="scoreTitle">YDİL Ek Puan : 👇</div>
                      <input type="number" step="0.00001" name="ek_dil_puan" placeholder="" />
                    </div>
                    <div class="scoreItem">
                      <div class="scoreTitle">YDİL Ek Puan Sırası : 👇</div>
                      <input type="text" name="ek_dil_sira" placeholder="" />
                    </div>
                  </div>
                </div>
              </div>

              <div class="divider"></div>

              <div class="grid">
                <div class="field half">
                  <label>Geçen yıl yerleşme durumu</label>
                  <select name="last_year_placement">
                    <option value="">Seçiniz</option>
                    <option value="yerlesmedi">Yerleşmedi</option>
                    <option value="yerlesti">Yerleşti</option>
                  </select>
                </div>
              
              </div>

            </div>
          </details>

        </div>
            </fieldset>
      </form>
    </div>
  </div>

  <div class="footerBar">
    <div class="footerInner">
      <div class="status">
      
      </div>
      <div style="display:flex;gap:10px;flex-wrap:wrap;">
        <a class="btn" href="/">Anasayfa</a>
        <button class="btn primary" type="submit" form="yksForm">Devam Et</button>
      </div>
    </div>
  </div>

  
  <!-- === Yasal Metin Modalı === -->
  <template id="tmplAydin">
    <pre class="legal-pre">Aydınlatma Metni

TercihRobotu.com.tr VERİ SORUMLUSU OLARAK GİRMİŞ OLDUĞUNUZ VERİLERİ AYDINLATMA METNİNE GÖRE İŞLEYECEKTİR.

    Kişisel verileriniz Aydınlatma Metni'nde belirtilen kapsamda işlenecektir, devam etmeden önce okumanızı önemle rica ederiz.
    KVKK Kapsamında verilerimin tercihrobotu.com.tr tarafından Aydınlatma Metni'ne göre işlenmesini onaylıyorum.
    Açık Rızam ile tarafıma -SMS -E-mail -Telefon ile ticari ileti yönlendirilmesini kabul ediyorum.

Açık Rıza: Aydınlatma Metni kapsamında, iletişim bilgilerim kullanılarak, tarafımla iletişimegeçilmesini; tercihrobotu.com.tr tarafından gerçekleştirilecek etkinlikler ve hizmetler ile tercihrobotu.com.tr den hizmet alan üniversiteler ile verilerimin paylaşılmasına ve bu yükseköğretim kurumlarından yaptıkları etkinlikler, tercih günleri, önlisans, lisans, yüksek lisans, doktora ve tüm diğer eğitim programları ile bünyelerinde yapılan tüm sosyal organizasyon ve davetler hakkında tarafıma seçtiğim iletişim kanalı/kanalları kullanılarak, ticari elektronik ileti/iletiler gönderilmesi amacıyla işlenmesini ve bunlarla sınırlı olarak hizmet alınan üçüncü taraflar ile paylaşılmasını kabul ediyorum.

AYDINLATMA METNİ

ES Eğitim Danışmanlık, gizliliğinizi korumak konusunda kararlıdır. Sitemizdeki çoğu sayfayıhakkınızda hiçbir bilgi vermeden ziyaret edebilirsiniz. Ancak zaman zaman istediğiniz hizmetleri verebilmemiz için bazı bilgiler gerekebilir ve bu gizlilik bildiriminde bu türden durumlarda veri toplama ve veri kullanımı açıklanmaktadır. Bu gizlilik bildirimi, yalnızca www.tercihrobotu.com.tr için geçerli olup diğer çevrimiçi veya çevrimdışı ES Eğitim Danışmanlık siteleri, ürünleri ve hizmetleri için geçerli değildir. Lütfen www.tercihrobotu.com.tr gizlilik bildiriminin tamamını okuyun.

Kişisel Bilgilerinizin Toplanması

Sizi kişisel olarak tanımlayan ve sizinle bağlantı kurmamıza olanak tanıyan bilgilere (kişisel bilgiler) ihtiyaç duyduğumuzda bunu size soracağız. tercihrobotu.com.tr tarafından toplanan kişisel bilgiler genelde e-posta adresi ve isim-soyad bilgileriyle sınırlıdır ancak istediğiniz bir hizmeti sağlamak için gerektiğinde başka bilgileri de içerebilir.

ES Eğitim Danışmanlık, kullanıcıların tercihrobotu.com.tr sitesi içinde hangi sayfaları ziyaret ettiği hakkında da bilgi toplar. Bu site ziyaret verileri benzersiz bir Kimlik numarasıyla tanımlanır ve kullanıcı aşağıda belirtildiği şekilde onay vermedikçe kişisel bilgilere hiçbir zaman ilişkilendirilmez.

Kişisel Bilgilerinizin Kullanımı

Kişisel bilgilerinizi aşağıdaki amaçlarla kullanırız:

    Sitemizin gereksinimlerinizi karşılamasını sağlamak için.
    Size en çok gerekli olan içeriği oluşturmak ve yayımlamak üzere yararlanmak için.
    Uygun olduğu ölçüde sitemizin giriş sınırlaması olan bölümlerine erişim hakkı tanımak için.

Araştırma amacıyla site ziyaret bilgilerini anonim demografik bilgilerle birleştirebilir ve bu bilgiler toplamını daha yararlı içerik sağlamak için kullanabiliriz. tercihrobotu.com.tr sitesiningiriş sınırlaması olan kimi bölümlerinde, kişiselleştirilmiş içerik sağlamak için sizden onay alarak site ziyaret verilerini kişisel bilgilerinizle birleştirebiliriz. İzin vermemeniz halinde, size kişiselleştirilmiş hizmet vermeyiz ve kişisel bilgilerinizle site ziyaret bilgilerinizi birleştirmeyiz.

 Size en çok gerekli olan içeriği oluşturmak ve yayımlamak üzere yararlanmak için. Uygun olduğu ölçüde sitemizin giriş sınırlaması olan bölümlerine erişim hakkı tanımak için.Araştırma amacıyla site ziyaret bilgilerini anonim demografik bilgilerle birleştirebilir ve bu bilgiler toplamını daha yararlı içerik sağlamak için kullanabiliriz. tercihrobotu.com.tr sitesiningiriş sınırlaması olan kimi bölümlerinde, kişiselleştirilmiş içerik sağlamak için sizden onay alarak site ziyaret verilerini kişisel bilgilerinizle birleştirebiliriz. İzin vermemeniz halinde, size kişiselleştirilmiş hizmet vermeyiz ve kişisel bilgilerinizle site ziyaret bilgilerinizi birleştirmeyiz.ES Eğitim Danışmanlık, kişisel bilgilerinizi, yasalar gereği açıklaması istendiğinde veya iyi niyetle, aşağıdakileri yapmak için bu bilgileri açıklamanın gerekli olduğu sonucuna vardığında: (a) yasal emirlere uymak veya ES Eğitim Danışmanlık'a veya siteye tebliğ edilen yasal süreçlere uygun davranmak; (b) ES Eğitim Danışmanlık veya ES Eğitim Danışmanlık sitesi mülkiyet haklarını korumak ve savunmak veya (c) acil durumlarda ES Eğitim Danışmanlık, çalışanlarının, ES Eğitim Danışmanlık ürünü ya da hizmetleri kullanıcılarının veya kamuoyu bileşenlerinin güvenliğini korumak.

Bilgileriniz ES Eğitim Danışmanlık kuruluşunda saklanabilir ve işlenebilir ve bu siteyi kullanmakla bu türden bir bilgi aktarımını onaylamış sayılırsınız.

Kişisel Bilgilerinizin Denetimi

Kayıt olduğunuzda veya başka biçimlerde bize kişisel bilgi verdiğinizde tercihrobotu.com.tr bu bilgileri, yukarıda listelenen sınırlı istisnalar dışında, izniniz olmadan üçüncü taraflarla paylaşmayacaktır. Bu bilgiler yalnızca yukarıda belirtilen amaçlarla kullanılacaktır.

Kaydolma işlemi, tercihrobotu.com.tr'in sizinle iletişim kurmasını isteyip istemediğinizi ya dahangi yöntemle iletişim kurmasını istediğinizi bize söyleme olanağı da tanır.

Bu Bildirimde Değişiklikler

tercihrobotu.com.tr arada sırada bu gizlilik bildirimini güncelleştirecektir. Bunu yaptığımızda,gizlilik bildiriminin başında yer alan "son güncelleştirme tarihi" de değiştirilecektir. ES Eğitim Danışmanlık, bu bildirimdeki maddi değişiklikleri, Web sitesine fark edilebilir bir duyuru koyarak bildirecektir.

İletişim Bilgileri

ES Eğitim Danışmanlık, bu gizlilik bildirimiyle ilgili yorumlarınızı almaktan memnun olacaktır; lütfen bizimle info@esegitim.com e-posta adresinden bağlantı kurun.
</pre>
  </template>

  <template id="tmplKosul">
    <pre class="legal-pre">Kullanım Koşulları : ES Eğitim Danışmanlık bu siteyi eğitim, bireysel olarak bilgi edinme ve iletişim amacıyla geliştirmiştir. Siteyi dilediğiniz gibi gezebilirsiniz. Sitede yayınlanan bilgileri, ticari amaç taşımayan ve kişisel kullanımınız için, metinde yer alan kopyalama ve özgün fikir hakları ile ilgili metinleri saklı tutmak kaydı ile kopyalayabilirsiniz. Diğer taraftan, ES Eğitim Danışmanlığın yazılı izni olmaksızın, metinler, resimler, animasyonlar veya ses kayıtlarını içeren site bilgilerinin ticari olarak veya alenen dağıtılması, üzerinde değişiklik yapılması, yeniden kullanılması yasaklanmıştır. Siteye erişim ve kullanımı aşağıdaki şartlar altında (Genel Şartlar) ve tüm geçerli kanunlara tabidir. Siteye erişim ve site içinde gezinme, Genel Şartların tamamının ve kullanıcı ile ES Eğitim Danışmanlığı bağlayan her türlü maddelerinin kabulü anlamına gelir.
Genel Şartlar

Bu site içerisinde bulunan bilgilerin tamamı, aksi ifade edilmediği sürece telif hakları yasasıyla korunmaktadır ve site metninde sunulan özgün göstergeler veya Genel Şartlara uygun olarak ES Eğitim Danışmanlığın yazılı izni olmadan kullanılamaz. Sitede bulunan bilgilerin kullanımının, ES Eğitim Danışmanlık'la ilişkisi olmayan üçüncü kişilerin haklarını ihlal etmeyeceği, ES Eğitim Danışmanlık tarafından garanti edilmemektedir.

ES Eğitim Danışmanlık site içerisinde sadece kesin ve güncellenmiş bilgileri tanıtmaya dikkat edecektir; ancak ES Eğitim Danışmanlık, site içeriğini etkileyecek bazı hata ve siteden çıkartılmış bilgilerden sorumlu tutularak bu yöndeki hiçbir garantiyi kabul etmez.

E-posta yoluyla ve diğer yollarla, kullanıcının siteyle göndereceği, veri, yorum ve önerileri içeren her türlü bilgi ve mesaj gizli olarak değerlendirilmeyecek ve hiçbir mülkiyet hakkı ile korunmayacaktır. Aktarılan ve gönderilen her konu, ES Eğitim Danışmanlık ve üyeleri tarafından, özellikle çoğaltma, açıklama, aktarma, yayınlama ve dağıtım da dahil olmak üzere her türlü amaç için kullanılabilir. Bununla birlikte, ES Eğitim Danışmanlık, siteye kullanıcı tarafından gönderilen mesajlarda geçen her türlü fikir, düşünce, metot veya teknikle birlikte, ilgili bilginin geliştirmede, üretimde ve ürünlerin pazarlanmasında özgürce kullanma hakkına sahiptir.

Site içerisinde kullanılan kişi ve mekan resimleri ya ES Eğitim Danışmanlık'a aittir ya da izin alınarak kullanılmıştır. Bu resimlerin, site metninde veya Genel Şartlarında ifade edildiği şekillerin dışında kullanıcı tarafından veya üçüncü şahıslar tarafından başka amaçlar için kullanımı yasaklanmıştır. Bu resimlerin her türlü izinsiz kullanımı; telif hakları, ticari markalar, özel hayatın korunması, reklamcılık ve iletişim yasalarındaki geçerli yönetmeliklerin ve yasaların ihlaline yol açabilir. Bu site içerisinde kullanılan ticari markalar, amblem ve ayırt edici ifadeler (grup, "Markalar"), ES Eğitim Danışmanlık ve diğer şahıslara ait tescilli veya tescilsiz markalardır.

Bu site içerisinde bahsi geçen hiçbir şey, hangi şekilde olursa olsun, tarafların yazılı izni olmadan marka veya markaların, ister bir lisans, ister herhangi bir hak ile kullanımı, üçüncü şahısları yetkilendirme olarak yorumlanacaktır. Markaların veya site içerisinde verilen bilgilerin Genel Şartların aksine her türlü izinsiz kullanımı tamamıyla yasaklanmıştır. ES Eğitim Danışmanlık, hukuk yolu dahil idaresindeki bütün yasal yöntemleri kullanarak mülkiyet haklarına uyacağını beyan eder.

ES Eğitim Danışmanlık bu siteye bağlı diğer sitelerin tamamını kontrol etmemiştir ve içeriklerinden sorumlu tutulamaz. Kullanıcının bu site üzerinden dış sayfalara veya diğer bütün sitelere erişimi sadece kendi sorumluluğundadır.

ES Eğitim Danışmanlık mevcut Genel Şartları her zaman değiştirme ve güncelleme hakkını saklı tutar. Bu değişiklik ve güncellemelere, mevcut Genel Şartların kontrol edilmesi için düzenli olarak başvurulacağı için kullanıcı, uyum göstereceği bu değişiklik ve güncellemeleri kabul edecektir.
</pre>
  </template>

  <div id="legalModal" class="modal-overlay" hidden aria-hidden="true">
    <div class="modal" role="dialog" aria-modal="true" aria-labelledby="legalModalTitle">
      <div class="modal-head">
        <div id="legalModalTitle" class="modal-title">Metin</div>
        <button type="button" id="legalModalClose" class="modal-close" aria-label="Kapat">✕</button>
      </div>
      <div id="legalModalBody" class="modal-body"></div>
    </div>
  </div>

<!-- PDF.js (CDN) -->

<script src="assets/app.js?v=7"></script>
<script>
// PDF doldurma uyumluluk yaması:
// Bazı PDF çıktılarında / eski normalize kodlarında "SÖZ" anahtarı "sozz" gibi üretilebiliyor.
// Bu yüzden TR_SetField'i sarmalayıp alan adlarını güvenli ASCII'ye çeviriyoruz.
(function(){
  if (typeof window.TR_SetField !== "function") return;
  const _orig = window.TR_SetField;

  function _fixName(name){
    name = String(name || "");
    // Birleşik karakterleri ayır + birleşik işaretleri sil (İ -> I + ̇)
    try{
      name = name.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
    }catch(e){}

    // Türkçe harfleri ASCII'ye indir
    name = name
      .replace(/ö/gi, "o")
      .replace(/ı/gi, "i")
      .replace(/ş/gi, "s")
      .replace(/ü/gi, "u")
      .replace(/ğ/gi, "g")
      .replace(/ç/gi, "c");

    // Eski dönüşüm hatası: söz -> sozz
    name = name.replace(/sozz/g, "soz");

    return name;
  }

  window.TR_SetField = function(name, value){
    return _orig.call(this, _fixName(name), value);
  };
})();
</script>
<script src="assets/pdf_fill.js?v=7"></script>


<script>
(function(){
  const consent = document.getElementById("consentAgree");
  const lockSet = document.getElementById("yksLockSet");
  const pdfInput = document.getElementById("osymPdf");
  const uploadLabel = document.getElementById("pdfUploadLabel");
  const submitBtn = document.querySelector('button[type="submit"][form="yksForm"]');
  const clearBtn = document.getElementById("btnClear");

  function setLocked(locked){
    if(lockSet) lockSet.disabled = locked;
    if(pdfInput) pdfInput.disabled = locked;
    if(submitBtn) submitBtn.disabled = locked;
    if(clearBtn) clearBtn.disabled = locked;
    if(uploadLabel){
      uploadLabel.classList.toggle("disabled", locked);
      uploadLabel.setAttribute("aria-disabled", locked ? "true" : "false");
    }
  }

  const LS_KEY = "tr_consentAgree_step1";

  function saveConsent(){
    try{
      if(!consent) return;
      if(consent.checked) localStorage.setItem(LS_KEY, "1");
      else localStorage.removeItem(LS_KEY);
    }catch(e){}
  }

  function restoreConsent(){
    if(!consent) return;
    try{
      if(localStorage.getItem(LS_KEY) === "1") consent.checked = true;
    }catch(e){}
  }

  // Varsayılan: kilitli (checkbox işaretlenince aç)
  setLocked(true);
  if(consent){
    restoreConsent();
    // tarayıcı geri yüklerse state'i dikkate al
    setLocked(!consent.checked);
    consent.addEventListener("change", function(){
      setLocked(!consent.checked);
      saveConsent();
    });
  }

  // Temizle'ye basınca onay da sıfırlansın
  if(clearBtn){
    clearBtn.addEventListener("click", function(){
      // Temizle'nin mevcut işlerini bozmadan, tick'i kaldır
      setTimeout(function(){
        if(!consent) return;
        consent.checked = false;
        saveConsent();
        setLocked(true);
      }, 0);
    });
  }

  // Modal
  const overlay = document.getElementById("legalModal");
  const titleEl = document.getElementById("legalModalTitle");
  const bodyEl = document.getElementById("legalModalBody");
  const closeBtn = document.getElementById("legalModalClose");

  function openFromTemplate(tmplId, title){
    const tmpl = document.getElementById(tmplId);
    if(!tmpl || !overlay || !bodyEl || !titleEl) return;
    titleEl.textContent = title;
    bodyEl.innerHTML = "";
    bodyEl.appendChild(tmpl.content.cloneNode(true));
    overlay.hidden = false;
    overlay.setAttribute("aria-hidden","false");
    document.body.classList.add("modal-open");
  }
  function closeModal(){
    if(!overlay) return;
    overlay.hidden = true;
    overlay.setAttribute("aria-hidden","true");
    document.body.classList.remove("modal-open");
    if(bodyEl) bodyEl.innerHTML = "";
  }

  const openA = document.getElementById("openAydin");
  const openK = document.getElementById("openKosul");
  if(openA) openA.addEventListener("click", function(e){ e.preventDefault(); openFromTemplate("tmplAydin","Aydınlatma Metni"); });
  if(openK) openK.addEventListener("click", function(e){ e.preventDefault(); openFromTemplate("tmplKosul","Kullanım Koşulları"); });

  if(closeBtn) closeBtn.addEventListener("click", closeModal);
  if(overlay) overlay.addEventListener("click", function(e){ if(e.target === overlay) closeModal(); });
  document.addEventListener("keydown", function(e){
    if(e.key === "Escape" && overlay && !overlay.hidden) closeModal();
  });
})();
</script>

<script>
(function(){
  const hintArea = document.getElementById("pdfHintArea");
  const doneArea = document.getElementById("pdfDoneArea");
  const uploadLabel = document.getElementById("pdfUploadLabel");
  const pdfInput = document.getElementById("osymPdf");
  const status = document.getElementById("pdfStatus");
  const btnClear = document.getElementById("btnClear");
  let doneOnce = false;

  function filledCount(){
    const watch = ["tckn","diploma","obp","okul_kodu","okul_tur_kodu","full_name"];
    let c = 0;
    for(const name of watch){
      const el = document.querySelector(`[name="${name}"]`);
      if(el && String(el.value||"").trim() !== "") c++;
    }
    return c;
  }

  function isErrorStatus(txt){
    txt = (txt||"").toLowerCase();
    return txt.includes("hata") || txt.includes("error") || txt.includes("bulunamad") || txt.includes("geçersiz");
  }

  function isSuccessStatus(txt){
    txt = (txt||"").toLowerCase();
    return txt.includes("okundu") || txt.includes("forma aktarıldı") || txt.includes("tamam");
  }

  function setDoneUI(){
    if(doneOnce) return;
    doneOnce = true;
    if(uploadLabel) uploadLabel.style.display = "none";
    if(doneArea) doneArea.style.display = "flex";
    // PDF'den gelen ad soyadı (formdaki full_name) mesajın yanına yaz
    const inlineName = document.getElementById("pdfNameInline");
    const fullNameEl = document.querySelector('[name="full_name"]');
    if(inlineName){
      const v = fullNameEl ? String(fullNameEl.value || "").trim() : "";
      inlineName.textContent = v ? (" " + v) : "";
    }
  }

  function resetPdfUI(){
    doneOnce = false;
    if(doneArea) doneArea.style.display = "none";
    if(uploadLabel) uploadLabel.style.display = "inline-flex";
    const inlineName = document.getElementById("pdfNameInline");
    if(inlineName) inlineName.textContent = "";
    if(pdfInput) pdfInput.value = "";
    if(status) status.textContent = "";
  }

  function tryAutoDone(){
    const txt = status ? (status.textContent || "") : "";
    if(isErrorStatus(txt)) return;
    if(isSuccessStatus(txt) || filledCount() >= 2) setDoneUI();
  }

  // PDF durum yazısı güncellenince yakala
  if(status && window.MutationObserver){
    const obs = new MutationObserver(tryAutoDone);
    obs.observe(status, {childList:true, subtree:true, characterData:true, attributes:true, attributeFilter:["style","class"]});
  }

  // Dosya seçilince kısa süre kontrol et (PDF okuma tamamlanınca alanlar doluyor)
  let pollTimer = null;
  if(pdfInput){
    pdfInput.addEventListener("change", function(){
      if(pollTimer) clearInterval(pollTimer);
      const started = Date.now();
      pollTimer = setInterval(function(){
        tryAutoDone();
        if(doneOnce){ clearInterval(pollTimer); pollTimer = null; return; }
        if(Date.now() - started > 90000){ clearInterval(pollTimer); pollTimer = null; }
      }, 300);
    });
  }

  window.addEventListener("load", tryAutoDone);

  // Temizle'ye basınca PDF alanını da eski haline döndür
  if(btnClear){
    btnClear.addEventListener("click", function(){
      // Diğer temizleme işlemleri bittikten sonra UI'ı resetleyelim
      setTimeout(resetPdfUI, 0);
    });
  }
})();
</script>

<script>
/* DİL / Y-DİL doldurma (server: pdftotext). Sadece boş alanları doldurur. */
(function(){
  const pdfInput = document.getElementById('osymPdf');
  if(!pdfInput) return;

  let pdfLoadingTimer = null;

  function showPdfLoading(file){
    const ov = document.getElementById('pdfLoadingOverlay');
    const secEl = document.getElementById('pdfLoadingSeconds');
    const fileEl = document.getElementById('pdfLoadingFile');
    const st = document.getElementById('pdfStatus');

    if(st){
      st.style.display = 'inline-block';
      st.textContent = 'PDF yükleniyor ve okunuyor... Taranmış PDF ise hızlı OCR işlemi yaklaşık 5-25 saniye sürebilir.';
    }

    if(fileEl){
      fileEl.textContent = file && file.name ? ('Dosya: ' + file.name) : '';
    }
    if(secEl){
      secEl.textContent = '0';
    }
    if(ov){
      ov.style.display = 'flex';
      ov.setAttribute('aria-hidden', 'false');
    }

    const started = Date.now();
    if(pdfLoadingTimer) clearInterval(pdfLoadingTimer);
    pdfLoadingTimer = setInterval(function(){
      if(secEl){
        secEl.textContent = String(Math.floor((Date.now() - started) / 1000));
      }
    }, 1000);
  }

  function hidePdfLoading(){
    if(pdfLoadingTimer){
      clearInterval(pdfLoadingTimer);
      pdfLoadingTimer = null;
    }
    const ov = document.getElementById('pdfLoadingOverlay');
    if(ov){
      ov.style.display = 'none';
      ov.setAttribute('aria-hidden', 'true');
    }
  }

  function q(name){ return document.querySelector('[name="'+name+'"]'); }

  function setIfEmpty(name, val){
    if(val == null) return;
    const el = q(name);
    if(!el) return;
    // PDF yüklendiğinde alanı gerçekten PDF verisiyle doldur/yenile.
    // Eski sürüm sadece boş alanı dolduruyordu; tarayıcı eski değeri tutunca kullanıcı alanlar dolmadı sanıyordu.
    el.value = val;
    try{
      el.dispatchEvent(new Event('input', {bubbles:true}));
      el.dispatchEvent(new Event('change', {bubbles:true}));
    }catch(e){}
  }

  function toNumberInput(s){
    return String(s || '').replace(/,/g,'.').trim();
  }
  function cleanRank(s){
    return String(s || '').replace(/\s+/g,'').trim();
  }

  function isPdfFile(file){
    if(!file) return false;
    const name = String(file.name || '').toLowerCase();
    const mime = String(file.type || '').toLowerCase();
    return name.endsWith('.pdf') && (mime === '' || mime === 'application/pdf' || mime === 'application/x-pdf');
  }

  async function parseOnServer(file){
    const fd = new FormData();
    fd.append('pdf', file, file.name || 'osym.pdf');

    // Kullanıcı bilgilerini de gönder (DB kaydı için)
    try{
      const fFull = document.querySelector('[name="full_name"]');
      const fTckn = document.querySelector('[name="tckn"]');
      const fPhone = document.querySelector('[name="phone"]');
      const fEmail = document.querySelector('[name="email"]');
      const fYear = document.querySelector('[name="exam_year"]');
      fd.append('full_name', fFull ? (fFull.value||'') : '');
      fd.append('tckn',      fTckn ? (fTckn.value||'') : '');
      fd.append('phone',     fPhone? (fPhone.value||'') : '');
      fd.append('email',     fEmail? (fEmail.value||'') : '');
      fd.append('exam_year', fYear ? (fYear.value||'') : '');
    }catch(e){}

    const url = (location.pathname || '') + '?pdfparse=1';
    const r = await fetch(url, { method:'POST', body: fd });
    if(!r.ok) throw new Error('http_' + r.status);
    const j = await r.json();
    if(!j || !j.ok) throw new Error((j && j.error) ? j.error : 'parse_fail');
    return j;
  }



  // DB'ye kullanıcı bilgilerini güncelle (debounce)
  let _yksSyncTimer = null;
  async function _yksLogSync(){
    const logId = (window.__pdfLogId || null);
    if(!logId) return;
    const fd = new FormData();
    fd.append('log_id', String(logId));
    const fFull = q('full_name');
    const fTckn = q('tckn');
    const fPhone = q('phone');
    const fEmail = q('email');
    const fYear = q('exam_year');
    fd.append('full_name', fFull ? (fFull.value||'') : '');
    fd.append('tckn',      fTckn ? (fTckn.value||'') : '');
    fd.append('phone',     fPhone? (fPhone.value||'') : '');
    fd.append('email',     fEmail? (fEmail.value||'') : '');
    fd.append('exam_year', fYear ? (fYear.value||'') : '');

    const url = (location.pathname || '') + '?logsync=1';
    const r = await fetch(url, { method:'POST', body: fd });
    // Başarısızsa sessiz geç (console'a bas)
    if(!r.ok){ try{ console.warn('logsync http', r.status); }catch(e){}; return; }
    const j = await r.json().catch(()=>null);
    if(!j || !j.ok){ try{ console.warn('logsync fail', j); }catch(e){} }
  }

  function _yksDebouncedSync(){
    if(_yksSyncTimer) clearTimeout(_yksSyncTimer);
    _yksSyncTimer = setTimeout(function(){
      _yksLogSync().catch(()=>{});
    }, 650);
  }

  // Kullanıcı form alanları değişince DB'yi güncelle
  ['full_name','tckn','phone','email','exam_year'].forEach(function(n){
    const el = q(n);
    if(!el) return;
    el.addEventListener('input', _yksDebouncedSync);
    el.addEventListener('change', _yksDebouncedSync);
  });

  pdfInput.addEventListener('change', function(){
    const f = pdfInput.files && pdfInput.files[0];
    if(!f) return;

    if(!isPdfFile(f)){
      pdfInput.value = '';
      try{
        const st = document.getElementById('pdfStatus');
        if(st){
          st.style.display = 'inline-block';
          st.textContent = 'Hata: Sadece gerçek PDF dosyası yükleyebilirsiniz.';
        }
      }catch(_){}
      alert('Sadece PDF dosyası yükleyebilirsiniz.');
      return;
    }

    showPdfLoading(f);

    setTimeout(async function(){
      try{
        const d = await parseOnServer(f);
        try{ window.__pdfLogId = d.log_id || null; }catch(e){}
        try{ if(d.log_id){ await _yksLogSync(); } }catch(e){}
        // PDF'den gelen tüm alanları formda boşsa doldur
        const pdfFields = [
          'tckn','full_name','email','exam_year',
          'tyt_turkce_d','tyt_turkce_y','tyt_sosyal_d','tyt_sosyal_y','tyt_mat_d','tyt_mat_y','tyt_fen_d','tyt_fen_y',
          'ayt_tde_d','ayt_tde_y','ayt_tarih1_d','ayt_tarih1_y','ayt_cog1_d','ayt_cog1_y',
          'ayt_tarih2_d','ayt_tarih2_y','ayt_cog2_d','ayt_cog2_y','ayt_felsefe_d','ayt_felsefe_y','ayt_dkab_d','ayt_dkab_y',
          'ayt_mat_d','ayt_mat_y','ayt_fizik_d','ayt_fizik_y','ayt_kimya_d','ayt_kimya_y','ayt_biyo_d','ayt_biyo_y',
          'diploma','obp','okul_kodu','okul_tur_kodu','alan_kodu','dal_no',
          'sinav_tyt_puan','sinav_tyt_sira','yer_tyt_puan','yer_tyt_sira','ek_tyt_puan','ek_tyt_sira',
          'sinav_say_puan','sinav_say_sira','yer_say_puan','yer_say_sira','ek_say_puan','ek_say_sira',
          'sinav_soz_puan','sinav_soz_sira','yer_soz_puan','yer_soz_sira','ek_soz_puan','ek_soz_sira',
          'sinav_ea_puan','sinav_ea_sira','yer_ea_puan','yer_ea_sira','ek_ea_puan','ek_ea_sira',
          'sinav_dil_puan','sinav_dil_sira','yer_dil_puan','yer_dil_sira','ek_dil_puan','ek_dil_sira'
        ];

        pdfFields.forEach(function(name){
          if(!(name in d)) return;
          let val = d[name];
          if(name.includes('_puan') || name === 'diploma' || name === 'obp') val = toNumberInput(val);
          if(name.includes('_sira')) val = cleanRank(val);
          setIfEmpty(name, val);
        });

        try{ if(d.log_id){ await _yksLogSync(); } }catch(e){}

        if(d.last_year_placement){
          const el = q('last_year_placement');
          if(el){
            el.value = d.last_year_placement;
            el.dispatchEvent(new Event('change', {bubbles:true}));
          }
        }

        try{
          const st = document.getElementById('pdfStatus');
          if(st){
            st.style.display='inline-block';
            st.textContent='PDF okundu, bilgiler forma aktarıldı';
          }
        }catch(_){}
      }catch(e){
        try{ console.warn('PDF server parse başarısız:', e); }catch(_){}
        try{
          const st = document.getElementById('pdfStatus');
          if(st){ st.style.display='inline-block'; st.textContent='PDF yüklendi ama veriler okunamadı: ' + (e && e.message ? e.message : e); }
        }catch(_){}
      }finally{
        hidePdfLoading();
      }
    }, 250);
  });
})();
</script>

<!-- SAĞ ALT "YUKARI ÇIK" OKU - BAŞLA -->
<style>
  #backToTopBtn{
    position: fixed;
    right: 16px;   /* DEĞİŞTİ: sağa alındı */
    bottom: 16px;
    width: 46px;
    height: 46px;
    border: 0;
    border-radius: 999px;
    cursor: pointer;
    display: none;
    align-items: center;
    justify-content: center;
    background: rgba(0,0,0,.75);
    color: #fff;
    z-index: 999999;
    box-shadow: 0 8px 20px rgba(0,0,0,.25);
    transition: transform .15s ease, opacity .15s ease, background .15s ease;
    opacity: 0;
  }
  #backToTopBtn.show{
    display: flex;
    opacity: 1;
  }
  #backToTopBtn:hover{
    transform: translateY(-2px);
    background: rgba(0,0,0,.85);
  }
  #backToTopBtn svg{ width: 22px; height: 22px; }
</style>

<button id="backToTopBtn" type="button" aria-label="Yukarı çık" title="Yukarı çık">
  <svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
    <path d="M12 5l-7 7 1.4 1.4L11 8.8V20h2V8.8l4.6 4.6L19 12l-7-7z" fill="currentColor"/>
  </svg>
</button>

<script>
  (function(){
    var btn = document.getElementById('backToTopBtn');
    if(!btn) return;

    function toggleBtn(){
      var y = window.pageYOffset || document.documentElement.scrollTop;
      if (y > 300) btn.classList.add('show');
      else btn.classList.remove('show');
    }

    window.addEventListener('scroll', toggleBtn, { passive: true });
    toggleBtn();

    btn.addEventListener('click', function(){
      window.scrollTo({ top: 0, behavior: 'smooth' });
    });
  })();
</script>
<!-- SAĞ ALT "YUKARI ÇIK" OKU - BİTİŞ -->


<script>
(function(){
  const btnClear = document.getElementById('btnClear');
  if(!btnClear) return;

  let clearing = false;

  async function clearAllStepSessions(){
    const body = new URLSearchParams();
    body.set('action', 'clear_all_steps');

    try{
      await fetch(location.pathname || 'step1.php', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
          'X-Requested-With': 'XMLHttpRequest'
        },
        credentials: 'same-origin',
        body: body.toString()
      });
    }catch(e){}
  }

  function clearBrowserStepData(){
    const keys = ['step1','step2','step3','step4','step4_program','step5','tr_consentAgree_step1','selectedPrograms'];

    try{
      for(let i = localStorage.length - 1; i >= 0; i--){
        const k = localStorage.key(i) || '';
        if(keys.some(x => k.indexOf(x) !== -1)) localStorage.removeItem(k);
      }
    }catch(e){}

    try{
      for(let i = sessionStorage.length - 1; i >= 0; i--){
        const k = sessionStorage.key(i) || '';
        if(keys.some(x => k.indexOf(x) !== -1)) sessionStorage.removeItem(k);
      }
    }catch(e){}
  }

  btnClear.addEventListener('click', async function(e){
    if(clearing) return;
    clearing = true;

    e.preventDefault();
    e.stopImmediatePropagation();

    clearBrowserStepData();
    await clearAllStepSessions();

    const target = (location.pathname || 'step1.php') + '?cleared=1';
    window.location.replace(target);
  }, true);
})();
</script>

</body>
</html>
