<?php
// ========================================
// مدیریت دسته‌بندی‌ها (نسخه اصلاح‌شده و حرفه‌ای)
// پروژه فروشگاه کیف‌لند
// ========================================
require_once '../config/database.php';
require_once '../config/settings.php';
require_once '../includes/auth.php';
require_once '../includes/functions.php';

Auth::requireAdmin();
$db = Database::getInstance()->getConnection();
$pageTitle = 'مدیریت دسته‌بندی‌ها | کیف‌لند';

$success = '';
$error = '';

// ========================================
// تابع تولید اسلاگ خودکار و یکتا
// ========================================
function generateUniqueSlug($name, $excludeId, $db) {
    // تبدیل حروف فارسی/عربی به معادل انگلیسی
    $persian = ['ا','آ','ب','پ','ت','ث','ج','چ','ح','خ','د','ذ','ر','ز','ژ','س','ش','ص','ض','ط','ظ','ع','غ','ف','ق','ک','گ','ل','م','ن','و','ه','ی','ء','ؤ','ئ'];
    $english = ['a','a','b','p','t','s','j','ch','h','kh','d','z','r','z','zh','s','sh','s','z','t','z','a','gh','f','gh','k','g','l','m','n','v','h','y','a','o','e'];
    
    $slug = str_replace($persian, $english, $name);
    $slug = strtolower(trim(preg_replace('/[^\w\s-]/', '', $slug)));
    $slug = preg_replace('/[\s_\-]+/', '-', $slug);
    $slug = trim($slug, '-');
    
    if (empty($slug)) {
        $slug = 'cat-' . time();
    }

    // بررسی یکتایی در دیتابیس
    $finalSlug = $slug;
    $counter = 1;
    while (true) {
        $stmt = $db->prepare("SELECT id FROM categories WHERE slug = ? AND id != ?");
        $stmt->execute([$finalSlug, $excludeId]);
        if ($stmt->rowCount() === 0) break;
        $finalSlug = $slug . '-' . $counter++;
    }
    return $finalSlug;
}

// ========================================
// پردازش درخواست‌ها (POST)
// ========================================
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    
    // ۱. افزودن یا ویرایش دسته‌بندی
    if (isset($_POST['action']) && $_POST['action'] == 'save_category') {
        try {
            $id = isset($_POST['cat_id']) ? (int)$_POST['cat_id'] : 0;
            $name = trim($_POST['name'] ?? '');
            $parent_id_raw = $_POST['parent_id'] ?? '';
            $icon = trim($_POST['icon'] ?? 'fas fa-folder');
            $is_active = isset($_POST['is_active']) ? 1 : 0;

            if (empty($name)) throw new Exception('نام دسته‌بندی الزامی است.');

            // ✅ رفع خطای Foreign Key: تبدیل 0 یا خالی به NULL
            $parent_id = ($parent_id_raw !== '' && $parent_id_raw !== '0') ? (int)$parent_id_raw : null;

            // جلوگیری از چرخه (نمی‌تواند والد خودش باشد)
            if ($id > 0 && $parent_id == $id) {
                throw new Exception('نمی‌توان دسته‌بندی را زیرمجموعه خودش قرار داد.');
            }

            // تولید اسلاگ خودکار و یکتا
            $slug = generateUniqueSlug($name, $id, $db);

            if ($id > 0) {
                // ویرایش
                $sql = "UPDATE categories SET name = ?, slug = ?, parent_id = ?, icon = ?, is_active = ?, updated_at = NOW() WHERE id = ?";
                $stmt = $db->prepare($sql);
                $stmt->execute([$name, $slug, $parent_id, $icon, $is_active, $id]);
                Auth::logActivity('category_edit', "ویرایش دسته‌بندی: $name");
            } else {
                // افزودن
                $sql = "INSERT INTO categories (name, slug, parent_id, icon, is_active, created_at, updated_at) VALUES (?, ?, ?, ?, 1, NOW(), NOW())";
                $stmt = $db->prepare($sql);
                $stmt->execute([$name, $slug, $parent_id, $icon]);
                Auth::logActivity('category_add', "افزودن دسته‌بندی: $name");
            }
            $success = 'دسته‌بندی با موفقیت ذخیره شد.';
        } catch (Exception $e) {
            $error = $e->getMessage();
        }
    }
    
    // ۲. حذف دسته‌بندی
    elseif (isset($_POST['delete_id'])) {
        $id = (int)$_POST['delete_id'];
        try {
            $child_stmt = $db->prepare("SELECT COUNT(*) FROM categories WHERE parent_id = ?");
            $child_stmt->execute([$id]);
            if ($child_stmt->fetchColumn() > 0) {
                throw new Exception('این دسته‌بندی دارای زیرمجموعه است. ابتدا زیرمجموعه‌ها را حذف یا جابجا کنید.');
            }
            $db->prepare("DELETE FROM categories WHERE id = ?")->execute([$id]);
            Auth::logActivity('category_delete', "حذف دسته‌بندی #$id");
            $success = 'دسته‌بندی حذف شد.';
        } catch (Exception $e) {
            $error = $e->getMessage();
        }
    }
}

// ========================================
// دریافت داده‌ها برای نمایش
// ========================================
$categories_stmt = $db->query("
    SELECT c.*, p.name as parent_name 
    FROM categories c 
    LEFT JOIN categories p ON c.parent_id = p.id 
    ORDER BY c.sort_order ASC, c.id DESC
");
$categories = $categories_stmt->fetchAll();

// آماده‌سازی برای مودال ویرایش/افزودن
$edit_cat = null;
if (isset($_GET['edit'])) {
    $stmt = $db->prepare("SELECT * FROM categories WHERE id = ?");
    $stmt->execute([(int)$_GET['edit']]);
    $edit_cat = $stmt->fetch();
}

include 'includes/admin-header.php';
?>

<style>
/* استایل‌های صفحه دسته‌بندی (بدون تغییر، کاملاً هماهنگ) */
.stats-bar { display: flex; gap: 16px; margin-bottom: 24px; }
.stat-box { background: var(--glass-bg); backdrop-filter: blur(20px); border: 1px solid var(--glass-border); border-radius: var(--radius-sm); padding: 16px 24px; display: flex; align-items: center; gap: 12px; flex: 1; }
.stat-box i { font-size: 24px; color: var(--primary); opacity: 0.8; }
.stat-info h3 { font-size: 24px; font-weight: 700; margin: 0; line-height: 1; }
.stat-info p { font-size: 12px; color: var(--text-secondary); margin: 4px 0 0 0; }
.table-responsive { overflow-x: auto; border-radius: var(--radius); margin-bottom: 20px; }
.data-table { width: 100%; border-collapse: collapse; min-width: 700px; }
.data-table thead th { text-align: right; padding: 14px 16px; font-size: 12px; font-weight: 600; color: var(--text-secondary); background: rgba(255,255,255,0.3); border-bottom: 1px solid var(--glass-border); }
.data-table tbody td { padding: 12px 16px; font-size: 13px; color: var(--text-primary); border-bottom: 0.5px solid rgba(255,255,255,0.15); vertical-align: middle; }
.data-table tbody tr:hover { background: rgba(255,255,255,0.2); }
.cat-name { display: flex; align-items: center; gap: 8px; font-weight: 600; }
.cat-icon { width: 28px; height: 28px; background: var(--glass-hover); border-radius: 6px; display: flex; align-items: center; justify-content: center; font-size: 12px; color: var(--primary); }
.cat-parent { font-size: 11px; color: var(--text-muted); background: rgba(0,0,0,0.05); padding: 2px 8px; border-radius: 10px; }
.slug-text { font-family: monospace; color: var(--text-secondary); font-size: 11px; background: rgba(255,255,255,0.3); padding: 2px 6px; border-radius: 4px; }
.action-btn-sm { width: 32px; height: 32px; border-radius: 8px; border: none; background: rgba(255,255,255,0.3); cursor: pointer; transition: all var(--transition-fast); display: inline-flex; align-items: center; justify-content: center; color: var(--text-secondary); font-size: 12px; margin-right: 4px; }
.action-btn-sm:hover { background: var(--glass-hover); transform: scale(1.05); }
.action-btn-sm.edit:hover { color: var(--primary); background: var(--primary-light); }
.action-btn-sm.delete:hover { color: var(--danger); background: var(--danger-light); }
.modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.4); backdrop-filter: blur(6px); z-index: 2000; display: none; align-items: center; justify-content: center; opacity: 0; transition: opacity var(--transition-fast); }
.modal-overlay.active { display: flex; opacity: 1; }
.modal-content { background: var(--glass-bg-light); backdrop-filter: var(--glass-blur); border: 1px solid var(--glass-border); border-radius: var(--radius-lg); width: 100%; max-width: 500px; box-shadow: var(--glass-shadow-lg); transform: scale(0.95); transition: transform var(--transition-fast); }
.modal-overlay.active .modal-content { transform: scale(1); }
.modal-header { padding: 20px; border-bottom: 1px solid var(--glass-border); display: flex; justify-content: space-between; align-items: center; }
.modal-header h3 { margin: 0; font-size: 18px; }
.modal-close { background: none; border: none; font-size: 20px; color: var(--text-muted); cursor: pointer; }
.modal-body { padding: 24px; }
.modal-footer { padding: 16px 20px; border-top: 1px solid var(--glass-border); display: flex; justify-content: flex-end; gap: 10px; }
.form-group { margin-bottom: 16px; }
.form-label { display: block; font-size: 13px; font-weight: 600; margin-bottom: 6px; }
.form-control { width: 100%; padding: 10px 14px; border: 1px solid var(--glass-border); border-radius: var(--radius-sm); background: var(--glass-bg); font-family: 'Vazirmatn', sans-serif; font-size: 14px; color: var(--text-primary); transition: all var(--transition-fast); }
.form-control:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(0,122,255,0.15); background: #fff; }
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; padding: 10px 20px; border-radius: var(--radius-sm); font-weight: 600; font-size: 14px; cursor: pointer; transition: all var(--transition-fast); border: none; font-family: 'Vazirmatn', sans-serif; }
.btn-primary { background: var(--primary); color: white; }
.btn-primary:hover { background: var(--primary-hover); transform: translateY(-1px); }
.btn-ghost { background: transparent; color: var(--text-secondary); border: 1px solid var(--glass-border); }
.btn-ghost:hover { background: var(--glass-hover); color: var(--text-primary); }
.checkbox-wrapper { display: flex; align-items: center; gap: 8px; cursor: pointer; margin-top: 8px; }
.checkbox-wrapper input { width: 16px; height: 16px; accent-color: var(--primary); }
@media (max-width: 768px) { .stats-bar { flex-direction: column; } .modal-content { margin: 10px; } }
</style>

<main class="main-content">
    <header class="top-header">
        <button class="menu-toggle" id="menuToggle"><i class="fas fa-bars"></i></button>
        <div class="search-box"><i class="fas fa-search"></i><input type="text" placeholder="جستجو در دسته‌بندی‌ها..."></div>
        <div class="header-actions">
            <button class="btn btn-primary btn-sm" onclick="openModal('add')">
                <i class="fas fa-plus"></i> دسته جدید
            </button>
        </div>
    </header>

    <div class="dashboard-content">
        <div class="page-title">
            <h1>مدیریت دسته‌بندی‌ها</h1>
            <p>ساختار درختی محصولات را مدیریت کنید</p>
        </div>

        <?php if ($error): ?><div class="alert alert-danger"><i class="fas fa-exclamation-circle"></i> <?= htmlspecialchars($error) ?></div><?php endif; ?>
        <?php if ($success): ?><div class="alert alert-success"><i class="fas fa-check-circle"></i> <?= htmlspecialchars($success) ?></div><?php endif; ?>

        <div class="stats-bar">
            <div class="stat-box">
                <i class="fas fa-layer-group"></i>
                <div class="stat-info"><h3><?= count($categories) ?></h3><p>کل دسته‌بندی‌ها</p></div>
            </div>
            <div class="stat-box">
                <i class="fas fa-sitemap"></i>
                <div class="stat-info"><h3><?= count(array_filter($categories, fn($c) => $c['parent_id'] == 0)) ?></h3><p>دسته‌های اصلی</p></div>
            </div>
        </div>

        <div class="table-responsive">
            <table class="data-table">
                <thead>
                    <tr>
                        <th>نام دسته‌بندی</th>
                        <th>والد</th>
                        <th>آدرس (Slug)</th>
                        <th>وضعیت</th>
                        <th style="width: 100px; text-align: center;">عملیات</th>
                    </tr>
                </thead>
                <tbody>
                    <?php foreach ($categories as $cat): ?>
                    <tr>
                        <td>
                            <div class="cat-name">
                                <div class="cat-icon"><i class="<?= htmlspecialchars($cat['icon'] ?: 'fas fa-folder') ?>"></i></div>
                                <?= htmlspecialchars($cat['name']) ?>
                            </div>
                        </td>
                        <td><?= $cat['parent_name'] ? '<span class="cat-parent">'.htmlspecialchars($cat['parent_name']).'</span>' : '<span class="text-muted" style="font-size:11px;">ریشه</span>' ?></td>
                        <td><span class="slug-text"><?= htmlspecialchars($cat['slug']) ?></span></td>
                        <td><span class="status <?= $cat['is_active'] ? 'success' : 'cancelled' ?>"><?= $cat['is_active'] ? 'فعال' : 'غیرفعال' ?></span></td>
                        <td style="text-align: center;">
                            <button class="action-btn-sm edit" onclick="openModal('edit', <?= $cat['id'] ?>)" title="ویرایش"><i class="fas fa-pen"></i></button>
                            <form method="POST" style="display:inline;" onsubmit="return confirm('آیا از حذف این دسته‌بندی مطمئن هستید؟');">
                                <input type="hidden" name="delete_id" value="<?= $cat['id'] ?>">
                                <button type="submit" class="action-btn-sm delete" title="حذف"><i class="fas fa-trash"></i></button>
                            </form>
                        </td>
                    </tr>
                    <?php endforeach; ?>
                    <?php if (empty($categories)): ?><tr><td colspan="5" class="text-center text-muted py-4">هیچ دسته‌بندی یافت نشد.</td></tr><?php endif; ?>
                </tbody>
            </table>
        </div>
    </div>
</main>

<!-- Modal: Add/Edit Category -->
<div class="modal-overlay" id="categoryModal">
    <div class="modal-content">
        <form method="POST">
            <input type="hidden" name="action" value="save_category">
            <input type="hidden" name="cat_id" id="cat_id">
            
            <div class="modal-header">
                <h3 id="modal_title">افزودن دسته جدید</h3>
                <button type="button" class="modal-close" onclick="closeModal()">&times;</button>
            </div>
            <div class="modal-body">
                <div class="form-group">
                    <label class="form-label">نام دسته‌بندی <span class="required">*</span></label>
                    <input type="text" name="name" id="cat_name" class="form-control" placeholder="مثال: کیف ورزشی" required>
                </div>
                <div class="form-group">
                    <label class="form-label">دسته مادر (اختیاری)</label>
                    <select name="parent_id" id="cat_parent" class="form-control">
                        <option value="">بدون والد (دسته اصلی)</option>
                        <?php 
                        // فیلتر کردن والدین معتبر (جلوگیری از انتخاب خود یا زیرمجموعه‌ها)
                        foreach ($categories as $pc): 
                            if ($edit_cat && $pc['id'] == $edit_cat['id']) continue; 
                        ?>
                        <option value="<?= $pc['id'] ?>"><?= htmlspecialchars($pc['name']) ?></option>
                        <?php endforeach; ?>
                    </select>
                </div>
                <div class="form-group">
                    <label class="form-label">آیکون (FontAwesome)</label>
                    <input type="text" name="icon" id="cat_icon" class="form-control" placeholder="fas fa-box" dir="ltr" value="fas fa-box">
                </div>
                <label class="checkbox-wrapper">
                    <input type="checkbox" name="is_active" id="cat_active" checked>
                    <span>فعال باشد</span>
                </label>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-ghost" onclick="closeModal()">انصراف</button>
                <button type="submit" class="btn btn-primary">ذخیره</button>
            </div>
        </form>
    </div>
</div>

<script src="assets/js/script.js"></script>
<script>
const modal = document.getElementById('categoryModal');

function openModal(mode, id = null) {
    document.querySelector('form').reset();
    document.getElementById('cat_icon').value = 'fas fa-box';
    document.getElementById('cat_active').checked = true;
    document.getElementById('cat_id').value = '';
    
    if (mode === 'edit' && id) {
        document.getElementById('modal_title').textContent = 'ویرایش دسته‌بندی';
        document.getElementById('cat_id').value = id;
        // بارگذاری داده‌ها از طریق ریدایرکت یا AJAX (ساده‌ترین راه: رفرش با پارامتر)
        window.location.href = 'categories.php?edit=' + id;
    } else {
        document.getElementById('modal_title').textContent = 'افزودن دسته جدید';
        modal.classList.add('active');
    }
}

function closeModal() {
    modal.classList.remove('active');
    // پاک کردن پارامتر edit از URL بدون رفرش
    if (window.location.search.includes('edit=')) {
        window.history.replaceState({}, document.title, "categories.php");
    }
}

// پر کردن فرم اگر در حالت ویرایش هستیم (PHP Data Injection)
<?php if ($edit_cat): ?>
document.getElementById('cat_id').value = <?= $edit_cat['id'] ?>;
document.getElementById('cat_name').value = `<?= addslashes($edit_cat['name']) ?>`;
document.getElementById('cat_parent').value = <?= $edit_cat['parent_id'] ?: '""' ?>;
document.getElementById('cat_icon').value = `<?= addslashes($edit_cat['icon'] ?: 'fas fa-box') ?>`;
document.getElementById('cat_active').checked = <?= $edit_cat['is_active'] ? 'true' : 'false' ?>;
document.getElementById('modal_title').textContent = 'ویرایش دسته‌بندی';
window.onload = function() { modal.classList.add('active'); };
<?php endif; ?>
</script>

<?php include 'includes/admin-footer.php'; ?>