<?php
session_start();
require_once '../includes/db_connect.php';

// Доступ — лише адміністратор
if (!isset($_SESSION['user_id']) || ($_SESSION['role'] ?? '') !== 'admin') {
    header("Location: ../index.php");
    exit();
}

// ID користувача для видалення
$target_id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
if ($target_id <= 0) {
    http_response_code(400);
    die("Невірний ідентифікатор користувача!");
}

// Заборона видаляти себе
if ((int)$_SESSION['user_id'] === $target_id) {
    http_response_code(403);
    die("Ви не можете видалити власний акаунт!");
}

// Дістанемо дані про користувача (для правил/логування)
$role = null;
$full_name = null;

$stmt = $conn->prepare("SELECT full_name, role FROM users WHERE id = ?");
$stmt->bind_param("i", $target_id);
$stmt->execute();
$res = $stmt->get_result();
if (!$res || $res->num_rows === 0) {
    $stmt->close();
    http_response_code(404);
    die("Користувача не знайдено!");
}
$row = $res->fetch_assoc();
$full_name = $row['full_name'];
$role = $row['role'];
$stmt->close();

// Заборона видаляти інших адміністраторів (щоб не втратити доступ)
if ($role === 'admin') {
    http_response_code(403);
    die("З міркувань безпеки видалення адміністратора заборонене.");
}

try {
    $conn->begin_transaction();

    if ($role === 'student') {
        // 1) Видаляємо оцінки студента
        $stmt = $conn->prepare("DELETE FROM grades WHERE student_id = ?");
        $stmt->bind_param("i", $target_id);
        $stmt->execute();
        $stmt->close();
        // (subjects/lessons не чіпаємо — вони не належать студенту)
    } elseif ($role === 'teacher') {
        // 1) Відв’язуємо предмети цього викладача (зберігаємо предмети)
        $stmt = $conn->prepare("UPDATE subjects SET teacher_id = NULL WHERE teacher_id = ?");
        $stmt->bind_param("i", $target_id);
        $stmt->execute();
        $stmt->close();
        // (оцінки/уроки лишаються — вони прив’язані до subject_id)
    }

    // 2) Видаляємо користувача
    $stmt = $conn->prepare("DELETE FROM users WHERE id = ?");
    $stmt->bind_param("i", $target_id);
    if (!$stmt->execute()) {
        throw new Exception("Помилка видалення користувача: " . $conn->error);
    }
    $stmt->close();

    // 3) Логування
    $admin_id = (int)$_SESSION['user_id'];
    $action = sprintf("Адмін %d видалив користувача '%s' (ID: %d, роль: %s)", $admin_id, $full_name, $target_id, $role);
    $stmt = $conn->prepare("INSERT INTO admin_logs (user_id, action) VALUES (?, ?)");
    $stmt->bind_param("is", $admin_id, $action);
    $stmt->execute();
    $stmt->close();

    $conn->commit();
    header("Location: dashboard.php?delete_success=1");
    exit();
} catch (Throwable $e) {
    $conn->rollback();
    http_response_code(500);
    echo "Помилка видалення: " . htmlspecialchars($e->getMessage(), ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
    exit();
}
