<?php
// admin/denemesonuc/excel-kaydet.php
session_start();
require_once '../../includes/db.php'; 
require_once '../header.php';

// Güvenlik Kontrolü: Doğrudan erişimi engelle
if ($_SERVER['REQUEST_METHOD'] != 'POST' || !isset($_SESSION['temp_csv_data'])) {
    echo "<script>window.location.href='sonuc-ekle.php';</script>";
    exit;
}

$mesaj = "";
$mesaj_turu = "";

try {
    // Veritabanı işlemleri için Transaction (İşlem Bloğu) başlatıyoruz.
    // Hata olursa hiçbir şey kaydedilmez, sistem temiz kalır.
    $db->beginTransaction();

    $product_id = $_SESSION['temp_product_id'];
    $csv_data   = $_SESSION['temp_csv_data'];
    $mappings   = isset($_POST['mapping']) ? $_POST['mapping'] : [];

    // 1. Sınav (Exam) Kaydını Hazırla
    // İlgili product_id'nin ürün bilgilerini products tablosundan çekiyoruz
    $prodStmt = $db->prepare("SELECT name, exam_type FROM products WHERE id = ?");
    $prodStmt->execute([$product_id]);
    $product = $prodStmt->fetch(PDO::FETCH_ASSOC);

    if(!$product) {
        throw new Exception("İşlem yapılmak istenen ürün veritabanında bulunamadı!");
    }

    // exam_analysis_exams tablosunda bu denemeye ait kayıt var mı?
    $examStmt = $db->prepare("SELECT id FROM exam_analysis_exams WHERE product_id = ?");
    $examStmt->execute([$product_id]);
    $exam = $examStmt->fetch(PDO::FETCH_ASSOC);

    if ($exam) {
        $exam_id = $exam['id'];
        // Deneme zaten varsa, eski cevap anahtarını siliyoruz ki güncellemeyi temiz yapalım
        $db->prepare("DELETE FROM exam_analysis_keys WHERE exam_id = ?")->execute([$exam_id]);
    } else {
        // İlk kez ekleniyorsa yeni sınav kaydı oluştur
        $insertExam = $db->prepare("INSERT INTO exam_analysis_exams (product_id, name, exam_type) VALUES (?, ?, ?)");
        $insertExam->execute([$product_id, $product['name'], $product['exam_type']]);
        $exam_id = $db->lastInsertId();
    }

    // 2. Eşleştirme (Mapping) Sözlüğünü Oluştur
    // Gelen konu ID'lerine göre 'konular' tablosundan orijinal adları çekeceğiz
    $final_mapping = [];

    // Konu adını çekmek için hazırladığımız sorgu
    $getKonuStmt = $db->prepare("SELECT ders, konu FROM konular WHERE id = ?");

    foreach ($mappings as $map) {
        $csv_lesson   = $map['csv_lesson'];
        $csv_topic    = $map['csv_topic'];
        $sys_topic_id = $map['system_topic_id'];

        if (!empty($sys_topic_id)) {
            $getKonuStmt->execute([$sys_topic_id]);
            $konuDb = $getKonuStmt->fetch(PDO::FETCH_ASSOC);

            if ($konuDb) {
                // Sistemin orjinal isimlerini kullan
                $final_mapping[$csv_lesson][$csv_topic] = [
                    'lesson' => $konuDb['ders'],
                    'topic'  => $konuDb['konu']
                ];
            } else {
                // Bulunamazsa Excel'deki haliyle kalsın (Fallback)
                $final_mapping[$csv_lesson][$csv_topic] = [
                    'lesson' => $csv_lesson,
                    'topic'  => $csv_topic
                ];
            }
        }
    }

    // 3. Soruları (Cevap Anahtarını) Veritabanına Yaz
    $insertKeyStmt = $db->prepare("INSERT INTO exam_analysis_keys 
        (exam_id, lesson_name, topic_name, correct_answer, a_question_no, b_question_no, c_question_no, d_question_no) 
        VALUES (?, ?, ?, ?, ?, ?, ?, ?)");

    $insert_count = 0;
    foreach ($csv_data as $row) {
        $csv_l = $row['lesson'];
        $csv_t = $row['topic'];

        // Sözlükten Standart İsmi Al (Eğer sözlükte yoksa kendi ismini kullan)
        $std_lesson = isset($final_mapping[$csv_l][$csv_t]['lesson']) ? $final_mapping[$csv_l][$csv_t]['lesson'] : $csv_l;
        $std_topic  = isset($final_mapping[$csv_l][$csv_t]['topic']) ? $final_mapping[$csv_l][$csv_t]['topic'] : $csv_t;

        $insertKeyStmt->execute([
            $exam_id,
            $std_lesson,
            $std_topic,
            $row['answer'],
            $row['a_no'],
            $row['b_no'],
            $row['c_no'],
            $row['d_no']
        ]);
        $insert_count++;
    }

    // Her şey yolundaysa işlemi onayla ve veritabanına yaz!
    $db->commit();

    // Session'daki geçici verileri temizle
    unset($_SESSION['temp_csv_data']);
    unset($_SESSION['temp_product_id']);

    $mesaj = "Harika! <strong>" . htmlspecialchars($product['name']) . "</strong> denemesine ait toplam <strong>{$insert_count}</strong> soru anahtarı başarıyla eşleştirildi ve sisteme kaydedildi.";
    $mesaj_turu = "success";

} catch (Exception $e) {
    // Hata olursa tüm işlemleri geri al
    $db->rollBack();
    $mesaj = "Kayıt sırasında bir hata oluştu: " . $e->getMessage();
    $mesaj_turu = "danger";
}
?>

<div class="container-fluid mt-5">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card shadow-lg border-0 rounded-3">
                <div class="card-body text-center p-5">
                    
                    <?php if($mesaj_turu == 'success'): ?>
                        <i class="bi bi-check-circle text-success" style="font-size: 5rem;"></i>
                        <h2 class="mt-4 text-success fw-bold">İşlem Tamamlandı!</h2>
                    <?php else: ?>
                        <i class="bi bi-x-circle text-danger" style="font-size: 5rem;"></i>
                        <h2 class="mt-4 text-danger fw-bold">İşlem Başarısız!</h2>
                    <?php endif; ?>
                    
                    <p class="lead mt-3 text-muted"><?= $mesaj ?></p>
                    
                    <hr class="my-4">
                    
                    <a href="sonuc-ekle.php" class="btn btn-primary btn-lg px-4 rounded-pill shadow-sm">
                        <i class="bi bi-arrow-left-circle me-2"></i> Yönetim Ekranına Dön
                    </a>
                </div>
            </div>
        </div>
    </div>
</div>

<?php require_once '../footer.php'; ?>