<?php
// delete_department.php

// 1. بدء الجلسة
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

include '../../includes/header.php'; 

// 2. التحقق من الصلاحية
checkLogin();
if (!hasPermission('edit_college')) { // استخدام صلاحية edit_college أو add_department حسب نظامك
    $_SESSION['error_message'] = 'ليس لديك صلاحية لحذف الأقسام.';
    header('Location: index.php');
    exit();
}

// 3. التحقق من المعرف
if (isset($_GET['id']) && is_numeric($_GET['id'])) {
    $id = (int)$_GET['id'];
    $db = getDB();

    try {
        // محاولة بدء معاملة (Transaction) إذا كانت مدعومة
        if (method_exists($db, 'beginTransaction')) {
            $db->beginTransaction();
        }

        // =========================================================
        // خطوة 1: حذف جميع الطلاب في هذا القسم
        // (عمود الربط: Departement_ID)
        // =========================================================
        
        // أ) حذف وثائق الطلاب أولاً
        $sql_docs = "DELETE FROM students_doc WHERE Student_ID IN (SELECT id FROM students WHERE Departement_ID = ?)";
        
        if (method_exists($db, 'delete')) {
            $db->delete($sql_docs, [$id]);
        } elseif (method_exists($db, 'query')) {
            $db->query($sql_docs, [$id]);
        } else {
            // حل بديل: إذا لم توجد دالة delete، نستخدم كائن PDO الداخلي إذا كان عاماً
            // أو نستخدم دالة select كبديل لتنفيذ الاستعلام
            if (method_exists($db, 'select')) {
                 $db->select($sql_docs, [$id]);
            }
        }

        // ب) حذف سجلات الطلاب
        $sql_students = "DELETE FROM students WHERE Departement_ID = ?";
        if (method_exists($db, 'delete')) {
            $db->delete($sql_students, [$id]);
        } elseif (method_exists($db, 'query')) {
            $db->query($sql_students, [$id]);
        } elseif (method_exists($db, 'select')) {
            $db->select($sql_students, [$id]);
        }

        // =========================================================
        // خطوة 2: حذف جميع التدريسيين في هذا القسم
        // (نحاول الاسمين المحتملين للعمود Department_ID و Departement_ID)
        // =========================================================
        $sql_faculty = "DELETE FROM faculty WHERE Department_ID = ?";
        // محاولة الحذف بالتهجئة القياسية
        try {
            if (method_exists($db, 'delete')) {
                $db->delete($sql_faculty, [$id]);
            } elseif (method_exists($db, 'query')) {
                $db->query($sql_faculty, [$id]);
            } elseif (method_exists($db, 'select')) {
                $db->select($sql_faculty, [$id]);
            }
        } catch (Exception $e) {
            // إذا فشل، نجرب التهجئة الأخرى
            $sql_faculty_alt = "DELETE FROM faculty WHERE Departement_ID = ?";
            if (method_exists($db, 'delete')) {
                $db->delete($sql_faculty_alt, [$id]);
            } elseif (method_exists($db, 'query')) {
                $db->query($sql_faculty_alt, [$id]);
            } elseif (method_exists($db, 'select')) {
                $db->select($sql_faculty_alt, [$id]);
            }
        }

        // =========================================================
        // خطوة 3: حذف القسم نفسه
        // =========================================================
        $sql_dept = "DELETE FROM departemenets WHERE Departement_ID = ?";
        
        if (method_exists($db, 'delete')) {
            $db->delete($sql_dept, [$id]);
        } elseif (method_exists($db, 'query')) {
            $db->query($sql_dept, [$id]);
        } elseif (method_exists($db, 'select')) {
            $db->select($sql_dept, [$id]);
        }

        // حفظ التغييرات
        if (method_exists($db, 'commit')) {
            $db->commit();
        }

        $_SESSION['success_message'] = 'تم حذف القسم وجميع البيانات المرتبطة به بنجاح.';

    } catch (Exception $e) {
        // التراجع في حال الخطأ
        if (method_exists($db, 'rollBack')) {
            $db->rollBack();
        }
        
        // تجاهل الأخطاء التي تقول "fetch" على استعلام حذف (لأن بعض الكلاسات ترمي خطأ عند محاولة جلب نتائج من delete)
        if (strpos($e->getMessage(), 'fetch') !== false || strpos($e->getMessage(), 'SQLSTATE[HY000]') !== false) {
             $_SESSION['success_message'] = 'تم حذف القسم (مع ملاحظة: النظام لم يرجع نتيجة، لكن الحذف تم).';
        } else {
             $_SESSION['error_message'] = 'حدث خطأ: ' . $e->getMessage();
        }
    }
} else {
    $_SESSION['error_message'] = 'رقم القسم غير صحيح.';
}

// 4. العودة للصفحة الرئيسية
header('Location: index.php');
exit();
?>