<?php
// admin_actions.php
session_start();
require_once 'config/database.php';

// Проверка прав администратора
if (!isset($_SESSION['isAdmin']) || $_SESSION['isAdmin'] !== true) {
    header('Location: вход.php?error=admin_only');
    exit();
}

$db = Database::getInstance()->getConnection();
$action = $_GET['action'] ?? '';

try {
    switch ($action) {
        case 'delete_product':
            if (isset($_GET['id'])) {
                $productId = intval($_GET['id']);
                // Делаем товар недоступным
                $stmt = $db->prepare("
                    UPDATE products
                    SET is_available = FALSE, stock_quantity = 0, updated_at = CURRENT_TIMESTAMP
                    WHERE product_id = ?
                ");
                $stmt->execute([$productId]);
                header('Location: admin_panel.php?action=products&message=Товар помечен как недоступный');
                exit();
            }
            break;

        case 'restore_product':
            if (isset($_GET['id'])) {
                $productId = intval($_GET['id']);
                // Восстанавливаем товар
                $stmt = $db->prepare("
                    UPDATE products
                    SET is_available = TRUE, stock_quantity = 10, updated_at = CURRENT_TIMESTAMP
                    WHERE product_id = ?
                ");
                $stmt->execute([$productId]);
                header('Location: admin_panel.php?action=products&message=Товар восстановлен');
                exit();
            }
            break;

        case 'delete_category':
            if (isset($_GET['id'])) {
                $categoryId = intval($_GET['id']);

                try {
                    // 1. Проверяем, есть ли товары в этой категории
                    $checkProducts = $db->prepare("SELECT COUNT(*) FROM products WHERE category_id = ?");
                    $checkProducts->execute([$categoryId]);
                    $productCount = $checkProducts->fetchColumn();

                    if ($productCount > 0) {
                        // Если есть товары, делаем категорию неактивной
                        $stmt = $db->prepare("UPDATE categories SET is_active = FALSE WHERE category_id = ?");
                        $stmt->execute([$categoryId]);
                        header('Location: admin_panel.php?action=categories&message=Категория скрыта (содержит товары)');
                        exit();
                    }

                    // 2. Проверяем, есть ли дочерние категории
                    $checkChildren = $db->prepare("SELECT COUNT(*) FROM categories WHERE parent_id = ?");
                    $checkChildren->execute([$categoryId]);
                    $childCount = $checkChildren->fetchColumn();

                    if ($childCount > 0) {
                        // Вариант A: Делаем категорию неактивной
                        $stmt = $db->prepare("UPDATE categories SET is_active = FALSE WHERE category_id = ?");
                        $stmt->execute([$categoryId]);
                        header('Location: admin_panel.php?action=categories&message=Категория скрыта (имеет дочерние категории)');
                        exit();

                        // Вариант B: Удаляем вместе с дочерними (раскомментируйте если нужно)
                        /*
                        // Сначала удаляем дочерние категории
                        $stmt = $db->prepare("DELETE FROM categories WHERE parent_id = ?");
                        $stmt->execute([$categoryId]);

                        // Затем удаляем саму категорию
                        $stmt = $db->prepare("DELETE FROM categories WHERE category_id = ?");
                        $stmt->execute([$categoryId]);

                        header('Location: admin_panel.php?action=categories&message=Категория и её дочерние категории удалены');
                        exit();
                        */
                    }

                    // 3. Если нет товаров и дочерних категорий, удаляем
                    $stmt = $db->prepare("DELETE FROM categories WHERE category_id = ?");
                    $stmt->execute([$categoryId]);

                    header('Location: admin_panel.php?action=categories&message=Категория удалена');
                    exit();

                } catch (PDOException $e) {
                    header('Location: admin_panel.php?action=categories&error=' . urlencode($e->getMessage()));
                    exit();
                }
            }
            break;

        case 'delete_category_force':
            // Принудительное удаление с дочерними категориями
            if (isset($_GET['id'])) {
                $categoryId = intval($_GET['id']);

                try {
                    // Сначала перемещаем товары в другую категорию (например, в первую)
                    $firstCategory = $db->query("SELECT category_id FROM categories WHERE category_id != ? LIMIT 1")->fetchColumn();

                    if ($firstCategory) {
                        $moveProducts = $db->prepare("UPDATE products SET category_id = ? WHERE category_id = ?");
                        $moveProducts->execute([$firstCategory, $categoryId]);
                    }

                    // Обнуляем parent_id у дочерних категорий
                    $stmt = $db->prepare("UPDATE categories SET parent_id = NULL WHERE parent_id = ?");
                    $stmt->execute([$categoryId]);

                    // Удаляем категорию
                    $stmt = $db->prepare("DELETE FROM categories WHERE category_id = ?");
                    $stmt->execute([$categoryId]);

                    header('Location: admin_panel.php?action=categories&message=Категория удалена. Товары перемещены.');
                    exit();

                } catch (PDOException $e) {
                    header('Location: admin_panel.php?action=categories&error=' . urlencode($e->getMessage()));
                    exit();
                }
            }
            break;

        case 'toggle_user':
            if (isset($_GET['id'])) {
                $userId = intval($_GET['id']);
                $stmt = $db->prepare("
                    UPDATE users
                    SET is_active = NOT is_active, updated_at = CURRENT_TIMESTAMP
                    WHERE user_id = ?
                ");
                $stmt->execute([$userId]);
                header('Location: admin_panel.php?action=users&message=Статус пользователя изменен');
                exit();
            }
            break;

        case 'make_admin':
            if (isset($_GET['id'])) {
                $userId = intval($_GET['id']);
                $stmt = $db->prepare("UPDATE users SET is_admin = TRUE WHERE user_id = ?");
                $stmt->execute([$userId]);
                header('Location: admin_panel.php?action=users&message=Пользователь назначен администратором');
                exit();
            }
            break;
    }
} catch (PDOException $e) {
    header('Location: admin_panel.php?error=' . urlencode($e->getMessage()));
    exit();
}

// Если действие не распознано
header('Location: admin_panel.php');
exit();
?>