<?php
/**
 * NEPHRO ERP - VERİ İŞLEM MOTORU (v33.2 - Bulletproof Edition)
 * - core/db.php TRY içine alındı (DB/require patlarsa 500 yerine log + mesaj)
 * - DB yoksa bile file log fallback var
 * - ob_end_flush güvenli
 */

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

// Debug (prod'da kapat)
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

/* -------------------------
   0) DOSYA LOG (DB yoksa bile)
-------------------------- */
define('APP_LOG_DIR', __DIR__ . '/storage/logs');
define('APP_LOG_FILE', APP_LOG_DIR . '/islem.log');

function fileLog($msg){
    if (!is_dir(APP_LOG_DIR)) {
        @mkdir(APP_LOG_DIR, 0775, true);
    }
    $line = "[".date('Y-m-d H:i:s')."] ".$msg."\n";
    @file_put_contents(APP_LOG_FILE, $line, FILE_APPEND);
}

register_shutdown_function(function () {
    $e = error_get_last();
    if ($e && in_array($e['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR], true)) {
        fileLog("FATAL: {$e['message']} | {$e['file']}:{$e['line']}");
        // prod'da göstermeyebilirsin. şimdilik gösterelim:
        if (!headers_sent()) {
            http_response_code(500);
            header('Content-Type: text/html; charset=utf-8');
        }
        echo "<div style='padding:18px;background:#fff1f2;border-radius:12px;font-family:system-ui'>
                <b>🚨 FATAL</b><br>
                <div style='margin-top:8px;white-space:pre-wrap'>".$e['message']."\n".$e['file'].":".$e['line']."</div>
                <div style='margin-top:8px;font-size:12px;color:#6b7280'>Log: storage/logs/islem.log</div>
              </div>";
    }
});

/* -------------------------
   1) YARDIMCILAR
-------------------------- */
if (!function_exists('h')) { function h($s){ return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); } }
if (!function_exists('postv')) { function postv($k, $d=''){ return isset($_POST[$k]) ? trim((string)$_POST[$k]) : $d; } }
if (!function_exists('getv')) { function getv($k, $d=''){ return isset($_GET[$k]) ? trim((string)$_GET[$k]) : $d; } }
if (!function_exists('postInt')) { function postInt($k, $d=0){ return isset($_POST[$k]) ? (int)$_POST[$k] : (int)$d; } }
if (!function_exists('onlyDigits')) { function onlyDigits($s){ return preg_replace('/\D+/', '', (string)$s); } }
if (!function_exists('safeEnum')) { function safeEnum($v, $allowed, $fallback=''){ return in_array($v, $allowed, true) ? $v : $fallback; } }
if (!function_exists('redirect')) {
    function redirect($url){
        if (!headers_sent()) header("Location: ".$url);
        exit;
    }
}
if (!function_exists('boolPost')) { function boolPost($k){ return isset($_POST[$k]) ? 1 : 0; } }

/* -------------------------
   2) OTURUM KONTROL
-------------------------- */
function requireLogin(){
    if (!isset($_SESSION['user_id'])) {
        die("Yetkisiz Erişim! Lütfen giriş yapın.");
    }
}

/* -------------------------
   3) DB LOGLAMA (fail olursa fileLog)
-------------------------- */
function sysLog($pdo, $tip, $tablo, $detay){
    try {
        if (!$pdo) { fileLog("SYSLOG(DB YOK): [$tip][$tablo] $detay"); return; }
        $u_id = (int)($_SESSION['user_id'] ?? 0);
        $ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
        $sql = "INSERT INTO sistem_loglari (kullanici_id, islem_tipi, tablo_adi, islem_detay, ip_adresi)
                VALUES (?, ?, ?, ?, ?)";
        $pdo->prepare($sql)->execute([$u_id, $tip, $tablo, $detay, $ip]);
    } catch (Throwable $e) {
        fileLog("SYSLOG HATA: ".$e->getMessage()." | [$tip][$tablo] $detay");
    }
}

/* -------------------------
   4) PIVOT SENKRON
-------------------------- */
function syncPivot($pdo, $table, $col, $hasta_id, $ids){
    $clean = [];
    foreach ((array)$ids as $v) {
        $i = (int)$v;
        if ($i > 0) $clean[$i] = true;
    }
    $ids = array_keys($clean);

    $pdo->prepare("DELETE FROM {$table} WHERE hasta_id = ?")->execute([(int)$hasta_id]);

    if (!empty($ids)) {
        $stmt = $pdo->prepare("INSERT INTO {$table} (hasta_id, {$col}) VALUES (?, ?)");
        foreach ($ids as $rid) {
            $stmt->execute([(int)$hasta_id, (int)$rid]);
        }
    }
}

/* -------------------------
   5) TANIMLAR WHITELIST
-------------------------- */
$TANIM_DEFS = [
    'kurumlar' => [
        'table'  => 'kurumlar',
        'fields' => [
            ['name'=>'kurum_adi','required'=>true],
            ['name'=>'kurum_tipi','required'=>true,'enum'=>['SGK','Özel','Diğer']],
        ]
    ],
    'sgk_tipleri' => [
        'table'  => 'sgk_tipleri',
        'fields' => [
            ['name'=>'ad','required'=>true],
        ]
    ],
    'hepatit_tanimlari' => [
        'table'  => 'hepatit_tanimlari',
        'fields' => [
            ['name'=>'ad','required'=>true],
        ]
    ],
    'damar_yolu_tanimlari' => [
        'table'  => 'damar_yolu_tanimlari',
        'fields' => [
            ['name'=>'ad','required'=>true],
        ]
    ],
    'alerji_tanimlari' => [
        'table'  => 'alerji_tanimlari',
        'fields' => [
            ['name'=>'ad','required'=>true],
        ]
    ],
    'kronik_hastalik_tanimlari' => [
        'table'  => 'kronik_hastalik_tanimlari',
        'fields' => [
            ['name'=>'ad','required'=>true],
        ]
    ],
    'risk_uyari_tanimlari' => [
        'table'  => 'risk_uyari_tanimlari',
        'fields' => [
            ['name'=>'ad','required'=>true],
        ]
    ],
];

function getTanimDefStrict($key, $defs){
    if (!isset($defs[$key])) throw new Exception("Geçersiz tanım anahtarı: ".$key);
    return $defs[$key];
}

/* =========================================================
   ANA TRY
========================================================= */
$pdo = null;

try {

    // ✅ KRİTİK: db.php artık TRY içinde
    require_once __DIR__ . '/core/db.php';
    // core/db.php içinde $pdo set ediliyor olmalı.
    if (!isset($pdo)) {
        throw new Exception("DB bağlantısı bulunamadı. core/db.php içinde \$pdo tanımlı değil.");
    }

    /* =========================================================
       A) LOGIN
    ========================================================== */
    if (isset($_POST['giris_yap'])) {
        $k_adi = postv('kullanici_adi');
        $sifre = postv('sifre');

        $sorgu = $pdo->prepare("SELECT * FROM kullanicilar WHERE kullanici_adi = ? AND durum = 1 LIMIT 1");
        $sorgu->execute([$k_adi]);
        $u = $sorgu->fetch(PDO::FETCH_ASSOC);

        if ($u && password_verify($sifre, $u['sifre'])) {
            $_SESSION['user_id']   = (int)$u['id'];
            $_SESSION['user_name'] = (string)$u['ad_soyad'];
            $_SESSION['user_role'] = (string)$u['rol'];

            $pdo->prepare("UPDATE kullanicilar SET son_gorulme = NOW() WHERE id = ?")->execute([(int)$u['id']]);
            sysLog($pdo, 'Giriş', 'kullanicilar', $u['ad_soyad'].' sisteme girdi.');
            redirect("index.php");
        }

        sysLog($pdo, 'Hatalı Giriş', 'kullanicilar', $k_adi.' ile başarısız giriş.');
        redirect("login.php?hata=gecersiz");
    }

    requireLogin();

    /* =========================================================
       B) TANIMLAR CRUD (EKLE/GÜNCELLE/SİL)
    ========================================================== */
    if (isset($_POST['tanim_ekle'])) {
        $key = postv('tanim_key');
        $def = getTanimDefStrict($key, $TANIM_DEFS);

        $cols = [];
        $vals = [];

        foreach ($def['fields'] as $f) {
            $name = $f['name'];
            $val  = postv($name);

            if (!empty($f['required']) && $val === '') throw new Exception("Zorunlu alan eksik: $name");
            if (isset($f['enum']) && $val !== '' && !in_array($val, $f['enum'], true)) throw new Exception("Geçersiz değer: $name");

            $cols[] = $name;
            $vals[] = $val;
        }

        $place = implode(',', array_fill(0, count($cols), '?'));
        $sql = "INSERT INTO {$def['table']} (".implode(',', $cols).") VALUES ($place)";
        $pdo->prepare($sql)->execute($vals);

        sysLog($pdo, 'Ekleme', $def['table'], "Tanım eklendi ($key)");
        redirect("index.php?sayfa=tanimlar&durum=eklendi#".$key);
    }

    if (isset($_POST['tanim_guncelle'])) {
        $key = postv('tanim_key');
        $id  = (int)postv('id');
        $def = getTanimDefStrict($key, $TANIM_DEFS);
        if ($id <= 0) throw new Exception("Geçersiz ID.");

        $sets = [];
        $vals = [];

        foreach ($def['fields'] as $f) {
            $name = $f['name'];
            $val  = postv($name);

            if (!empty($f['required']) && $val === '') throw new Exception("Zorunlu alan eksik: $name");
            if (isset($f['enum']) && $val !== '' && !in_array($val, $f['enum'], true)) throw new Exception("Geçersiz değer: $name");

            $sets[] = "$name=?";
            $vals[] = $val;
        }

        $vals[] = $id;
        $sql = "UPDATE {$def['table']} SET ".implode(',', $sets)." WHERE id=?";
        $pdo->prepare($sql)->execute($vals);

        sysLog($pdo, 'Güncelleme', $def['table'], "Tanım güncellendi ($key, ID:$id)");
        redirect("index.php?sayfa=tanimlar&durum=guncellendi#".$key);
    }

    if (getv('islem') === 'tanim_sil') {
        $key = getv('key');
        $id  = (int)getv('id');
        $def = getTanimDefStrict($key, $TANIM_DEFS);
        if ($id <= 0) throw new Exception("Geçersiz ID.");

        $pdo->prepare("DELETE FROM {$def['table']} WHERE id=?")->execute([$id]);
        sysLog($pdo, 'Silme', $def['table'], "Tanım silindi ($key, ID:$id)");
        redirect("index.php?sayfa=tanimlar&durum=silindi#".$key);
    }

    /* =========================================================
       C) AYARLAR GÜNCELLEME
    ========================================================== */
    if (isset($_POST['ayarlar_guncelle'])) {

        $ayar_id = postInt('id', 1);

        $chk = $pdo->prepare("SELECT * FROM ayarlar WHERE id = ? LIMIT 1");
        $chk->execute([$ayar_id]);
        $row = $chk->fetch(PDO::FETCH_ASSOC);

        if (!$row) {
            $pdo->prepare("INSERT INTO ayarlar (id, merkez_adi) VALUES (?, ?)")->execute([$ayar_id, 'NEPHRO Diyaliz']);
            $chk->execute([$ayar_id]);
            $row = $chk->fetch(PDO::FETCH_ASSOC);
        }

        $sms_password  = postv('sms_password')    !== '' ? postv('sms_password')    : ($row['sms_password'] ?? null);
        $dislab_pass   = postv('dislab_password') !== '' ? postv('dislab_password') : ($row['dislab_password'] ?? null);
        $smtp_password = postv('smtp_password')   !== '' ? postv('smtp_password')   : ($row['smtp_password'] ?? null);

        $smtp_secure = safeEnum(postv('smtp_secure', 'tls'), ['none','ssl','tls'], 'tls');

        $notify_days_before = (int)postv('notify_days_before', 7);
        if ($notify_days_before < 0) $notify_days_before = 0;
        if ($notify_days_before > 365) $notify_days_before = 365;

        $notify_hour = (int)postv('notify_hour', 9);
        if ($notify_hour < 0) $notify_hour = 0;
        if ($notify_hour > 23) $notify_hour = 23;

        $pdo->prepare("
            UPDATE ayarlar SET
              merkez_adi = ?,
              merkez_eposta = ?,
              merkez_tel = ?,
              merkez_adres = ?,
              sgk_anlasma_no = ?,

              sms_enabled = ?,
              sms_provider = ?,
              sms_api_url = ?,
              sms_username = ?,
              sms_password = ?,
              sms_sender = ?,

              dislab_enabled = ?,
              dislab_api_url = ?,
              dislab_username = ?,
              dislab_password = ?,
              dislab_api_key = ?,

              mail_enabled = ?,
              smtp_host = ?,
              smtp_port = ?,
              smtp_secure = ?,
              smtp_username = ?,
              smtp_password = ?,
              smtp_from_email = ?,
              smtp_from_name = ?,

              notify_days_before = ?,
              notify_hour = ?
            WHERE id = ?
        ")->execute([
            postv('merkez_adi'),
            postv('merkez_eposta'),
            postv('merkez_tel'),
            postv('merkez_adres'),
            postv('sgk_anlasma_no'),

            boolPost('sms_enabled'),
            postv('sms_provider'),
            postv('sms_api_url'),
            postv('sms_username'),
            $sms_password,
            postv('sms_sender'),

            boolPost('dislab_enabled'),
            postv('dislab_api_url'),
            postv('dislab_username'),
            $dislab_pass,
            postv('dislab_api_key'),

            boolPost('mail_enabled'),
            postv('smtp_host'),
            (postv('smtp_port') !== '' ? (int)postv('smtp_port') : null),
            $smtp_secure,
            postv('smtp_username'),
            $smtp_password,
            postv('smtp_from_email'),
            postv('smtp_from_name'),

            $notify_days_before,
            $notify_hour,

            $ayar_id
        ]);

        sysLog($pdo, 'Güncelleme', 'ayarlar', "Ayarlar güncellendi (ID:$ayar_id).");
        redirect("index.php?sayfa=ayarlar&durum=ok");
    }

    /* =========================================================
       D) HASTA KAYDET & GÜNCELLE + PIVOT
    ========================================================== */
    if (isset($_POST['hasta_kaydet']) || isset($_POST['hasta_guncelle'])) {

        $id = (int)postv('id', 0);
        $tc = onlyDigits(postv('tc_no'));

        $ad = postv('ad');
        $soyad = postv('soyad');
        $ad_soyad = trim($ad.' '.$soyad);

        $durum = safeEnum(postv('durum', 'aktif'), ['aktif','pasif','vefat','nakil'], 'aktif');

        $pdo->beginTransaction();

        if (isset($_POST['hasta_kaydet'])) {

            $sql = "INSERT INTO hastalar
              (tc_no, ad, soyad, dogum_tarihi, kan_grubu, cinsiyet, hepatit_durumu, damar_yolu, diyabet_durumu, kuru_agirlik,
               telefon, adres,
               yakin_ad_soyad, yakin_yakinlik_derecesi, yakin_telefon,
               yakin2_ad_soyad, yakin2_yakinlik_derecesi, yakin2_telefon,
               durum)
              VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

            $pdo->prepare($sql)->execute([
                $tc, $ad, $soyad,
                postv('dogum_tarihi'),
                postv('kan_grubu'),
                postv('cinsiyet'),
                postv('hepatit_durumu'),
                postv('damar_yolu'),
                (int)postv('diyabet_durumu'),
                postv('kuru_agirlik'),
                postv('telefon'),
                postv('adres'),
                postv('yakin_ad_soyad'),
                postv('yakin_yakinlik_derecesi'),
                postv('yakin_telefon'),
                postv('yakin2_ad_soyad'),
                postv('yakin2_yakinlik_derecesi'),
                postv('yakin2_telefon'),
                $durum
            ]);

            $id = (int)$pdo->lastInsertId();
            sysLog($pdo, 'Ekleme', 'hastalar', "$ad_soyad hasta eklendi (ID:$id).");
            $durum_url = "basarili";

        } else {

            $sql = "UPDATE hastalar SET
              tc_no=?, ad=?, soyad=?, dogum_tarihi=?, kan_grubu=?, cinsiyet=?, hepatit_durumu=?, damar_yolu=?,
              diyabet_durumu=?, kuru_agirlik=?, telefon=?, adres=?,
              yakin_ad_soyad=?, yakin_yakinlik_derecesi=?, yakin_telefon=?,
              yakin2_ad_soyad=?, yakin2_yakinlik_derecesi=?, yakin2_telefon=?,
              durum=?
              WHERE id=?";

            $pdo->prepare($sql)->execute([
                $tc, $ad, $soyad,
                postv('dogum_tarihi'),
                postv('kan_grubu'),
                postv('cinsiyet'),
                postv('hepatit_durumu'),
                postv('damar_yolu'),
                (int)postv('diyabet_durumu'),
                postv('kuru_agirlik'),
                postv('telefon'),
                postv('adres'),
                postv('yakin_ad_soyad'),
                postv('yakin_yakinlik_derecesi'),
                postv('yakin_telefon'),
                postv('yakin2_ad_soyad'),
                postv('yakin2_yakinlik_derecesi'),
                postv('yakin2_telefon'),
                $durum,
                $id
            ]);

            sysLog($pdo, 'Güncelleme', 'hastalar', "$ad_soyad güncellendi (ID:$id).");
            $durum_url = "guncellendi";
        }

        if (isset($_POST['alerjiler']) && is_array($_POST['alerjiler'])) {
            syncPivot($pdo, 'hasta_alerjiler', 'alerji_id', $id, $_POST['alerjiler']);
        }
        if (isset($_POST['hepatitler']) && is_array($_POST['hepatitler'])) {
            syncPivot($pdo, 'hasta_hepatitler', 'hepatit_id', $id, $_POST['hepatitler']);
        }

        $pdo->commit();
        redirect("index.php?sayfa=hasta-liste&durum=".urlencode($durum_url));
    }

    /* =========================================================
       E) SEANS
    ========================================================== */
    if (isset($_POST['plan_ekle'])) {
        $h_id = (int)postv('hasta_id');

        $pdo->prepare("INSERT INTO seans_programi (hasta_id, cihaz_id, plan_tarihi, planlanan_saat, durum)
                       VALUES (?,?,?,?,'Randevu')")
            ->execute([$h_id, (int)postv('cihaz_id'), postv('plan_tarihi'), postv('saat')]);

        sysLog($pdo, 'Planlama', 'seans_programi', "Hasta ID:$h_id seans planlandı.");
        redirect("index.php?sayfa=seans-takvimi&durum=ok");
    }

    if (isset($_POST['seans_baslat_kaydet_yeni'])) {
        $pdo->beginTransaction();

        $pdo->prepare("UPDATE seans_programi SET
            cihaz_id=?,
            baslangic_vakti=NOW(),
            giris_kilo=?,
            tans_sys=?,
            tans_dia=?,
            nabiz=?,
            durum='Basladi'
          WHERE id=?")
          ->execute([
              (int)postv('cihaz_id'),
              postv('giris_kilo'),
              postv('tans_sys'),
              postv('tans_dia'),
              postv('nabiz'),
              (int)postv('plan_id')
          ]);

        sysLog($pdo, 'Seans', 'seans_programi', "Seans başladı. Plan ID:".postv('plan_id'));
        $pdo->commit();

        redirect("index.php?sayfa=bugunku-seanslar&durum=basladi");
    }

    /* =========================================================
       F) STOK
    ========================================================== */
    if (isset($_POST['stok_kaydet']) || isset($_POST['stok_guncelle'])) {
        $urun = postv('urun_adi');

        if (isset($_POST['stok_kaydet'])) {
            $pdo->prepare("INSERT INTO stok (urun_adi, lot_no, stok_miktari, birim, skt, kritik_seviye, barkod)
                           VALUES (?,?,?,?,?,?,?)")
                ->execute([
                    $urun,
                    postv('lot_no'),
                    (int)postv('stok_miktari'),
                    postv('birim'),
                    postv('skt'),
                    (int)postv('kritik_seviye'),
                    postv('barkod')
                ]);
            sysLog($pdo, 'Ekleme', 'stok', "$urun eklendi.");
        } else {
            $pdo->prepare("UPDATE stok SET urun_adi=?, lot_no=?, stok_miktari=?, birim=?, skt=?, kritik_seviye=?, barkod=? WHERE id=?")
                ->execute([
                    $urun,
                    postv('lot_no'),
                    (int)postv('stok_miktari'),
                    postv('birim'),
                    postv('skt'),
                    (int)postv('kritik_seviye'),
                    postv('barkod'),
                    (int)postv('urun_id')
                ]);
            sysLog($pdo, 'Güncelleme', 'stok', "$urun güncellendi.");
        }

        redirect("index.php?sayfa=stok-liste&durum=ok");
    }

    if (isset($_POST['stok_hareket_kaydet'])) {
        $st_id = (int)postv('stok_id');
        $tip   = safeEnum(postv('islem_tipi'), ['Giriş','Çıkış'], 'Giriş');
        $mik   = (int)postv('miktar');

        $pdo->beginTransaction();

        $pdo->prepare("INSERT INTO stok_hareketleri (stok_id, kullanici_id, islem_tipi, miktar)
                       VALUES (?,?,?,?)")
            ->execute([$st_id, (int)$_SESSION['user_id'], $tip, $mik]);

        $op = ($tip === 'Giriş') ? '+' : '-';
        $pdo->prepare("UPDATE stok SET stok_miktari = stok_miktari $op ? WHERE id=?")
            ->execute([$mik, $st_id]);

        $pdo->commit();

        sysLog($pdo, 'Stok Hareket', 'stok', "Stok ID:$st_id | $mik adet $tip.");
        redirect("index.php?sayfa=stok-hareket&urun_id=".urlencode((string)$st_id));
    }

    /* =========================================================
       G) CİHAZ
    ========================================================== */
    if (isset($_POST['cihaz_islem'])) {
        $id = (int)postv('id');

        $marka_model = postv('marka_model');
        $seri_no     = postv('seri_no');
        $oda_no      = postv('oda_no');
        $durum       = postv('durum');
        $izolasyon   = (int)postv('izolasyon_durumu');

        if ($id > 0) {
            $pdo->prepare("UPDATE cihazlar SET marka_model=?, seri_no=?, oda_no=?, durum=?, izolasyon_durumu=? WHERE id=?")
                ->execute([$marka_model, $seri_no, $oda_no, $durum, $izolasyon, $id]);
            sysLog($pdo, 'Güncelleme', 'cihazlar', "$marka_model güncellendi (ID:$id).");
        } else {
            $pdo->prepare("INSERT INTO cihazlar (marka_model, seri_no, oda_no, durum, izolasyon_durumu)
                           VALUES (?,?,?,?,?)")
                ->execute([$marka_model, $seri_no, $oda_no, $durum, $izolasyon]);
            sysLog($pdo, 'Ekleme', 'cihazlar', "$marka_model eklendi.");
        }

        redirect("index.php?sayfa=cihazlar");
    }

    /* =========================================================
       H) PROFİL / KULLANICI
    ========================================================== */
    if (isset($_POST['profil_guncelle'])) {
        $ad = postv('ad_soyad');
        $yeni = postv('yeni_sifre');

        if ($yeni !== '') {
            $pdo->prepare("UPDATE kullanicilar SET ad_soyad=?, sifre=? WHERE id=?")
                ->execute([$ad, password_hash($yeni, PASSWORD_BCRYPT), (int)$_SESSION['user_id']]);
        } else {
            $pdo->prepare("UPDATE kullanicilar SET ad_soyad=? WHERE id=?")
                ->execute([$ad, (int)$_SESSION['user_id']]);
        }

        sysLog($pdo, 'Profil', 'kullanicilar', 'Profil güncellendi.');
        redirect("index.php?sayfa=ayarlar&durum=ok");
    }

    if (isset($_POST['kullanici_ekle'])) {
        $pdo->prepare("INSERT INTO kullanicilar (ad_soyad, kullanici_adi, sifre, rol, durum)
                       VALUES (?,?,?,?,1)")
            ->execute([
                postv('ad_soyad'),
                postv('kullanici_adi'),
                password_hash(postv('sifre'), PASSWORD_BCRYPT),
                postv('rol')
            ]);

        sysLog($pdo, 'Personel', 'kullanicilar', postv('ad_soyad').' eklendi.');
        redirect("index.php?sayfa=ayarlar&durum=basarili");
    }

    if (getv('islem') === 'kullanici_sil') {
        $id = (int)getv('id');

        if ($id !== (int)$_SESSION['user_id']) {
            $pdo->prepare("DELETE FROM kullanicilar WHERE id=?")->execute([$id]);
            sysLog($pdo, 'Silme', 'kullanicilar', "ID:$id silindi.");
        }

        redirect("index.php?sayfa=ayarlar&durum=silindi");
    }

    /* =========================================================
       I) NOT SİL
    ========================================================== */
    if (getv('islem') === 'not_sil') {
        $tablo = (getv('tip') === 'vizit') ? 'vizit_notlari' : 'hemsire_notlari';
        $nid = (int)getv('id');

        $pdo->prepare("DELETE FROM {$tablo} WHERE id=?")->execute([$nid]);
        sysLog($pdo, 'Silme', $tablo, "ID:$nid not silindi.");

        redirect("index.php?sayfa=".urlencode(getv('sayfa'))."&id=".urlencode(getv('hasta_id'))."&durum=silindi");
    }

    // Hiçbir şeye girmediyse
    redirect("index.php");

} catch (PDOException $e) {
    if ($pdo && $pdo->inTransaction()) { $pdo->rollBack(); }
    fileLog("PDOException: ".$e->getMessage());
    sysLog($pdo, 'Hata', 'DB', $e->getMessage());

    http_response_code(500);
    echo "<div style='padding:18px;background:#fff1f2;border-radius:12px;font-family:system-ui'>
            <b>🚨 Veritabanı Hatası</b><br>
            <div style='margin-top:8px;white-space:pre-wrap'>".h($e->getMessage())."</div>
            <div style='margin-top:8px;font-size:12px;color:#6b7280'>Log: storage/logs/islem.log</div>
          </div>";
} catch (Throwable $e) {
    fileLog("Throwable: ".$e->getMessage()." | ".$e->getFile().":".$e->getLine());
    sysLog($pdo, 'Hata', 'Sistem', $e->getMessage());

    http_response_code(500);
    echo "<div style='padding:18px;background:#fff1f2;border-radius:12px;font-family:system-ui'>
            <b>🚨 Sistem Hatası</b><br>
            <div style='margin-top:8px;white-space:pre-wrap'>".h($e->getMessage())."</div>
            <div style='margin-top:8px;font-size:12px;color:#6b7280'>Log: storage/logs/islem.log</div>
          </div>";
} finally {
    if (ob_get_level() > 0) { @ob_end_flush(); }
}
