<?php
/**
 * Nephro Link - Main Router (dashboard.php) - TOPBAR ONLY (No Sidebar/Header)
 */
error_reporting(E_ALL);
ini_set('display_errors', '1');

if (session_status() === PHP_SESSION_NONE) { session_start(); }

require_once __DIR__ . '/core/db.php';

// Sayfa parametresini güvenli al
$sayfa = preg_replace('/[^a-zA-Z0-9-]/', '', $_GET['sayfa'] ?? 'dashboard');

// Auth (login hariç her yerde)
if ($sayfa !== 'login') {
    require_once __DIR__ . '/core/auth.php';
}

// Dil (auth sonrası -> user_id garanti)
require_once __DIR__ . '/core/i18n.php';

// ---------- Başlıklar (TR/EN) ----------
$basliklar = [
  'tr' => [
    'dashboard'          => 'Genel Bakış',
    'hasta-liste'        => 'Hasta Listesi',
    'hasta-ekle'         => 'Yeni Hasta Kaydı',
    'onam-arsiv'         => 'Onam & Arşiv',
    'dislab-gonder'      => 'Dışlab Hasta Gönderimi',
    'dislab-izle'        => 'Dışlab Hasta İzle',

    'seans-baslat'       => 'Seans Başlat',
    'aktif-seans-takip'  => 'Aktif Seans Takibi',
    'aktif-seans-detay'  => 'Seans Gözlem Paneli',
    'seans-takvimi'      => 'Haftalık Planlama',
    'bugunku-seanslar'   => 'Bugünkü Akış',
    'yatak-doluluk'      => 'Cihaz/Yatak Durumu',

    'vizit-notlari'      => 'Doktor Vizit Notları',
    'hemsire-notlari'    => 'Hemşire Gözlem',
    'lab-sonuclari'      => 'Laboratuvar Sonuçları',

    'stok-takip'         => 'Sarf Malzeme Stok',
    'stok-liste'         => 'Malzeme Listesi',
    'stok-hareket'       => 'Depo Hareketleri',

    'test-tanimlari'     => 'Test Tanımları',
    'tanimlar'           => 'Sistem Tanımları',
    'cihazlar'           => 'Cihaz Tanımları',
    'cihaz-bakimlari'    => 'Cihaz Bakımları',
    'ayarlar'            => 'Sistem Ayarları',
    'log-listesi'        => 'Sistem Logları',
  ],
  'en' => [
    'dashboard'          => 'Overview',
    'hasta-liste'        => 'Patient List',
    'hasta-ekle'         => 'New Patient',
    'onam-arsiv'         => 'Consent & Archive',
    'dislab-gonder'      => 'Send to External Lab',
    'dislab-izle'        => 'Track External Lab',

    'seans-baslat'       => 'Start Session',
    'aktif-seans-takip'  => 'Active Session Tracking',
    'aktif-seans-detay'  => 'Session Monitoring',
    'seans-takvimi'      => 'Weekly Planning',
    'bugunku-seanslar'   => 'Today Flow',
    'yatak-doluluk'      => 'Device/Bed Status',

    'vizit-notlari'      => 'Doctor Notes',
    'hemsire-notlari'    => 'Nurse Observations',
    'lab-sonuclari'      => 'Lab Results',

    'stok-takip'         => 'Consumable Stock',
    'stok-liste'         => 'Items List',
    'stok-hareket'       => 'Warehouse Movements',

    'test-tanimlari'     => 'Test Definitions',
    'tanimlar'           => 'System Definitions',
    'cihazlar'           => 'Device Definitions',
    'cihaz-bakimlari'    => 'Device Maintenance',
    'ayarlar'            => 'System Settings',
    'log-listesi'        => 'System Logs',
  ]
];

$lang = $_SESSION['lang'] ?? 'tr';
$lang = in_array($lang, ['tr','en'], true) ? $lang : 'tr';

$sayfa_basligi = $basliklar[$lang][$sayfa] ?? ($lang === 'tr' ? 'Panel' : 'Panel');

// ---------- Şifre değiştir POST handler ----------
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'change_password') {

    $uid = (int)($_SESSION['user_id'] ?? 0);
    $posted_uid = (int)($_POST['user_id'] ?? 0);

    $cur = (string)($_POST['current_password'] ?? '');
    $n1  = (string)($_POST['new_password'] ?? '');
    $n2  = (string)($_POST['new_password2'] ?? '');

    $err = null;

    if ($uid <= 0 || $uid !== $posted_uid) $err = ($lang==='tr'?'Yetkisiz işlem.':'Unauthorized action.');
    elseif ($n1 !== $n2) $err = ($lang==='tr'?'Yeni şifreler eşleşmiyor.':'New passwords do not match.');
    elseif (mb_strlen($n1) < 8) $err = ($lang==='tr'?'Şifre en az 8 karakter olmalı.':'Password must be at least 8 characters.');

    if ($err) {
        $_SESSION['flash_er'] = $err;
        header("Location: dashboard.php?" . http_build_query($_GET)); exit;
    }

    // stored hash
    $stored = null;

    if (isset($pdo) && $pdo instanceof PDO) {
        $st = $pdo->prepare("SELECT password_hash FROM users WHERE id=? LIMIT 1");
        $st->execute([$uid]);
        $stored = $st->fetchColumn();
    } elseif (isset($db) && $db instanceof mysqli) {
        $st = $db->prepare("SELECT password_hash FROM users WHERE id=? LIMIT 1");
        $st->bind_param("i", $uid);
        $st->execute();
        $st->bind_result($stored);
        $st->fetch();
        $st->close();
    }

    if (!$stored) {
        $_SESSION['flash_er'] = ($lang==='tr'?'Kullanıcı bulunamadı.':'User not found.');
        header("Location: dashboard.php?" . http_build_query($_GET)); exit;
    }

    // eski sha256 ise destek, değilse password_verify
    $ok = false;
    if (preg_match('/^[a-f0-9]{64}$/i', (string)$stored)) $ok = (hash('sha256', $cur) === $stored);
    else $ok = password_verify($cur, $stored);

    if (!$ok) {
        $_SESSION['flash_er'] = ($lang==='tr'?'Mevcut şifre hatalı.':'Current password is incorrect.');
        header("Location: dashboard.php?" . http_build_query($_GET)); exit;
    }

    $newHash = password_hash($n1, PASSWORD_DEFAULT);

    if (isset($pdo) && $pdo instanceof PDO) {
        $up = $pdo->prepare("UPDATE users SET password_hash=? WHERE id=?");
        $up->execute([$newHash, $uid]);
    } elseif (isset($db) && $db instanceof mysqli) {
        $up = $db->prepare("UPDATE users SET password_hash=? WHERE id=?");
        $up->bind_param("si", $newHash, $uid);
        $up->execute();
        $up->close();
    }

    $_SESSION['flash_ok'] = ($lang==='tr'?'Şifre başarıyla güncellendi.':'Password updated successfully.');
    header("Location: dashboard.php?" . http_build_query($_GET)); exit;
}

// --------- güvenli include ---------
$dosya = __DIR__ . "/modules/$sayfa.php";

// --------- TOPBAR resolve (esnek) ---------
$current_page = $sayfa; // topbar aktif menü için kullanabiliyorsan
$topbarPath = null;
$topbarCandidates = [
  __DIR__ . '/topbar.php',
  __DIR__ . '/includes/topbar.php',
  __DIR__ . '/partials/topbar.php',
  __DIR__ . '/layout/topbar.php',
  __DIR__ . '/components/topbar.php',
];
foreach ($topbarCandidates as $p) {
  if (is_file($p)) { $topbarPath = $p; break; }
}
?>
<!DOCTYPE html>
<html lang="<?= $lang === 'tr' ? 'tr' : 'en' ?>">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Nephro Link | <?= htmlspecialchars($sayfa_basligi, ENT_QUOTES, 'UTF-8') ?></title>

  <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800;900&display=swap" rel="stylesheet">

  <style>
    :root{
      --bg:#f8fafc;
      --text:#0f172a;
      --muted:#64748b;
      --border:#e2e8f0;
      --accent:#4361ee;
      --shadow: 0 14px 40px rgba(15,23,42,.08);
      --r: 16px;
      --content-pad: 26px;
      --topbar-h: 72px;
    }

    *{ box-sizing:border-box; }
    html,body{ height:100%; }
    body{
      margin:0;
      font-family: "Segoe UI", Inter, system-ui, -apple-system, Roboto, Arial, sans-serif;
      background: var(--bg);
      color: var(--text);
      overflow-x:hidden;
    }

    /* App shell */
    .app{
      min-height: 100vh;
      display:flex;
      flex-direction:column;
    }

    /* Content */
    .page-content{
      flex:1;
      padding: var(--content-pad);
      animation: fadeIn .25s ease both;
    }

    /* Optional: Topbar fixed ise içerik üstten pay bırak */
    .has-fixed-topbar .page-content{
      padding-top: calc(var(--content-pad) + var(--topbar-h));
    }

    @keyframes fadeIn{
      from{ opacity:0; transform: translateY(10px); }
      to{ opacity:1; transform: translateY(0); }
    }

    @media (max-width: 992px){
      :root{ --content-pad: 14px; }
      .has-fixed-topbar .page-content{
        padding-top: calc(var(--content-pad) + var(--topbar-h));
      }
    }
  </style>
</head>

<body>
  <div class="app <?= $topbarPath ? 'has-fixed-topbar' : '' ?>">
    <?php
      // TOPBAR
      if ($topbarPath) {
        include $topbarPath;
      }
    ?>

    <main class="page-content">
      <?php
        echo "<!-- INCLUDE DOSYA: " . htmlspecialchars($dosya, ENT_QUOTES, 'UTF-8') . " -->";

        if (is_file($dosya)) {
          include $dosya;
        } else {
          $msg1 = ($lang==='tr') ? 'Sayfa Hazırlık Aşamasında' : 'Page Under Construction';
          $msg2 = ($lang==='tr') ? 'Dosya bulunamadı' : 'File not found';
          $msg3 = ($lang==='tr') ? "Dashboard'a Dön" : "Back to Dashboard";

          echo "
          <div style='text-align:center; padding:90px 20px;'>
            <i class='bi bi-exclamation-triangle' style='font-size:46px; color:#f59e0b;'></i>
            <h3 style='margin-top:18px; font-weight:1000;'>$msg1</h3>
            <p style='color:#64748b; font-weight:900;'>$msg2: <b>" . htmlspecialchars(basename($dosya), ENT_QUOTES, 'UTF-8') . "</b></p>
            <a href='dashboard.php?sayfa=dashboard' style='color:var(--accent); font-weight:1000; text-decoration:none;'>$msg3</a>
          </div>";
        }
      ?>
    </main>
  </div>

  <script>
    // Eğer topbar içinde toggle/menü butonun varsa, bunu kullanabilirsin.
    // Sidebar artık yok, ama topbar mobile menü aç/kapa gibi bir state kullanıyorsan bu işini görür.
    function toggleTopbarMenu() {
      document.body.classList.toggle('topbar-menu-open');
    }
  </script>
</body>
</html>
