<?php

declare(strict_types=1);

require_once __DIR__ . '/../includes/config.php';
require_once __DIR__ . '/../includes/auth.php';
require_once __DIR__ . '/../includes/functions.php';
require_once __DIR__ . '/../includes/module_hub_helpers.php';
require_once __DIR__ . '/../includes/v3_admin_helpers.php';

require_admin_login();
$db = v3_db();
v3_ensure_schema($db);

if (is_post()) {
    $action = (string)post('action');

    if ($action === 'save_tier') {
        $tierId = (int)post('tier_id', 0);
        $title = trim((string)post('title', ''));
        $slug = trim((string)post('slug', ''));
        $description = trim((string)post('description', ''));
        $benefits = trim((string)post('benefits_text', ''));
        $minSpent = max(0, (float)post('min_total_spent', 0));
        $minOrders = max(0, (int)post('min_total_orders', 0));
        $minPoints = max(0, (int)post('min_points', 0));
        $extraDiscountPercent = max(0, min(100, (float)post('extra_discount_percent', 0)));
        $thresholdPromotionIds = trim((string)post('threshold_promotion_ids', ''));
        $colorHex = trim((string)post('color_hex', '#8B5CF6')) ?: '#8B5CF6';
        $sortOrder = (int)post('sort_order', 0);
        $isActive = post('is_active') ? 1 : 0;

        if ($title === '') {
            set_flash('error', 'اسم المستوى مطلوب.');
        } else {
            if ($slug === '') {
                $slug = preg_replace('/[^a-z0-9]+/i', '-', strtolower($title)) ?: 'tier-' . time();
            }
            if ($tierId > 0) {
                $stmt = $db?->prepare('UPDATE customer_tiers SET title = ?, slug = ?, description = ?, benefits_text = ?, min_total_spent = ?, min_total_orders = ?, min_points = ?, extra_discount_percent = ?, threshold_promotion_ids = ?, color_hex = ?, sort_order = ?, is_active = ?, updated_at = NOW() WHERE id = ?');
                if ($stmt) {
                    $stmt->bind_param('ssssdiidssiii', $title, $slug, $description, $benefits, $minSpent, $minOrders, $minPoints, $extraDiscountPercent, $thresholdPromotionIds, $colorHex, $sortOrder, $isActive, $tierId);
                    $ok = $stmt->execute();
                    $stmt->close();
                    if ($ok) {
                        admin_log_activity('tiers.update', 'تحديث مستوى', 'تم تحديث مستوى عميل.', 'customer_tier', $tierId, ['title' => $title]);
                    }
                    set_flash($ok ? 'success' : 'error', $ok ? 'تم تحديث المستوى.' : 'تعذر تحديث المستوى.');
                }
            } else {
                $stmt = $db?->prepare('INSERT INTO customer_tiers (title, slug, description, benefits_text, min_total_spent, min_total_orders, min_points, extra_discount_percent, threshold_promotion_ids, color_hex, sort_order, is_active, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW())');
                if ($stmt) {
                    $stmt->bind_param('ssssdiidssii', $title, $slug, $description, $benefits, $minSpent, $minOrders, $minPoints, $extraDiscountPercent, $thresholdPromotionIds, $colorHex, $sortOrder, $isActive);
                    $ok = $stmt->execute();
                    $stmt->close();
                    if ($ok) {
                        admin_log_activity('tiers.create', 'إنشاء مستوى', 'تم إنشاء مستوى جديد.', 'customer_tier', (int)$db->insert_id, ['title' => $title]);
                    }
                    set_flash($ok ? 'success' : 'error', $ok ? 'تم إنشاء المستوى.' : 'تعذر إنشاء المستوى.');
                }
            }
        }
        redirect_to(admin_url('customer_tiers/index.php'));
    }


    if ($action === 'save_tier_settings') {
        $tierPointsPerAmount = max(1, (int)post('tier_points_per_amount', 10000));
        $tierCycleMode = in_array((string)post('tier_cycle_mode', 'permanent'), ['permanent', 'annual'], true) ? (string)post('tier_cycle_mode', 'permanent') : 'permanent';
        $tierInactivityDays = max(0, (int)post('tier_inactivity_days', 0));
        v3_setting_set($db, 'tier_points_per_amount', (string)$tierPointsPerAmount, 'loyalty');
        v3_setting_set($db, 'tier_cycle_mode', $tierCycleMode, 'loyalty');
        v3_setting_set($db, 'tier_inactivity_days', (string)$tierInactivityDays, 'loyalty');
        admin_log_activity('tiers.settings', 'حفظ إعدادات المستويات', 'تم تحديث الإعدادات العامة للمستويات.', 'tier_settings', 0, [
            'tier_points_per_amount' => $tierPointsPerAmount,
            'tier_cycle_mode' => $tierCycleMode,
            'tier_inactivity_days' => $tierInactivityDays,
        ]);
        set_flash('success', 'تم تحديث إعدادات المستويات العامة.');
        redirect_to(admin_url('customer_tiers/index.php'));
    }

    if ($action === 'assign_tier') {
        $customerId = (int)post('customer_id', 0);
        $tierId = (int)post('assign_tier_id', 0);
        $note = trim((string)post('assign_note', ''));
        $ok = v3_assign_customer_tier($db, $customerId, $tierId, $note);
        if ($ok) {
            admin_log_activity('tiers.assign', 'ربط مستوى بزبون', 'تم ربط مستوى بزبون يدوياً.', 'customer', $customerId, ['tier_id' => $tierId, 'note' => $note]);
        }
        set_flash($ok ? 'success' : 'error', $ok ? 'تم ربط المستوى بالزبون.' : 'تعذر ربط المستوى بالزبون.');
        redirect_to(admin_url('customer_tiers/index.php'));
    }

    if ($action === 'sync_tiers') {
        $changes = v3_sync_customer_tiers($db);
        admin_log_activity('tiers.sync', 'مزامنة المستويات', 'تم تشغيل مزامنة المستويات.', 'customer_tiers', 0, ['changes' => $changes]);
        set_flash('success', 'تمت مزامنة المستويات التلقائية. عدد التغييرات: ' . $changes);
        redirect_to(admin_url('customer_tiers/index.php'));
    }
}

if ((string)get_value('delete') !== '') {
    $deleteId = (int)get_value('delete');
    if ($deleteId > 0) {
        $stmt = $db?->prepare('DELETE FROM customer_tiers WHERE id = ?');
        if ($stmt) {
            $stmt->bind_param('i', $deleteId);
            $ok = $stmt->execute();
            $stmt->close();
            if ($ok) {
                admin_log_activity('tiers.delete', 'حذف مستوى', 'تم حذف مستوى عميل.', 'customer_tier', $deleteId);
            }
            set_flash($ok ? 'success' : 'error', $ok ? 'تم حذف المستوى.' : 'تعذر حذف المستوى.');
        }
        redirect_to(admin_url('customer_tiers/index.php'));
    }
}

$flash = get_flash();
$tierPointsPerAmount = max(1, (int)v3_setting_get($db, 'tier_points_per_amount', '10000'));
$tierCycleMode = in_array((string)v3_setting_get($db, 'tier_cycle_mode', 'permanent'), ['permanent', 'annual'], true) ? (string)v3_setting_get($db, 'tier_cycle_mode', 'permanent') : 'permanent';
$tierInactivityDays = max(0, (int)v3_setting_get($db, 'tier_inactivity_days', '0'));
$tiers = hub_fetch_all($db, 'SELECT * FROM customer_tiers ORDER BY sort_order ASC, min_points ASC, id ASC');
$thresholdPromotions = hub_fetch_all($db, "SELECT id, title FROM threshold_promotions WHERE status = 1 ORDER BY priority ASC, id DESC");
$customerMap = v3_customer_name_map($db);
$assignmentRows = hub_fetch_all($db, "SELECT c.id, c.full_name, c.phone, c.total_spent, c.total_orders, c.points_balance, COALESCE(c.tier_points,0) AS tier_points, t.title AS tier_title, t.color_hex FROM customers c LEFT JOIN customer_tiers t ON t.id = c.tier_id ORDER BY c.id DESC LIMIT 20");
$historyRows = hub_fetch_all($db, "SELECT h.*, c.full_name, t.title AS tier_title, a.full_name AS admin_name FROM customer_tier_history h LEFT JOIN customers c ON c.id = h.customer_id LEFT JOIN customer_tiers t ON t.id = h.tier_id LEFT JOIN admins a ON a.id = h.assigned_by_admin_id ORDER BY h.id DESC LIMIT 15");
$page_title = 'V3 - مستويات العملاء';
require_once __DIR__ . '/../includes/header.php';
require_once __DIR__ . '/../includes/sidebar.php';
?>
<div class="nay-dashboard-page">
    <div class="nay-dashboard-main">
        <?php if ($flash): ?>
            <div class="alert alert-<?= e((string)$flash['type']) ?>"><?= e((string)$flash['message']) ?></div>
        <?php endif; ?>

        <div class="nay-dashboard-hero">
            <div>
                <h1>مستويات العملاء</h1>
                <p>من هنا تنشئين مستويات مثل Bronze / Silver / Gold / VIP، تحددين شروطها ومزاياها، وتربطينها يدويًا أو تلقائيًا حسب Tier Points ومزايا كل مستوى.</p>
            </div>
            <div class="nay-actions">
                <form method="post" style="display:inline;">
                    <input type="hidden" name="action" value="sync_tiers">
                    <button class="nay-btn primary" type="submit"><i class="fa-solid fa-rotate"></i> مزامنة تلقائية</button>
                </form>
            </div>
        </div>

        <div class="nay-grid-two">
            <div class="nay-card">
                <h3>إعدادات المستويات العامة</h3>
                <form method="post" style="display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;">
                    <input type="hidden" name="action" value="save_tier_settings">
                    <label>
                        كل مبلغ يمنح Tier Point
                        <input type="number" name="tier_points_per_amount" min="1" step="1" value="<?= (int)$tierPointsPerAmount ?>">
                    </label>
                    <label>
                        دورة المستويات
                        <select name="tier_cycle_mode">
                            <option value="permanent" <?= $tierCycleMode === 'permanent' ? 'selected' : '' ?>>دائم</option>
                            <option value="annual" <?= $tierCycleMode === 'annual' ? 'selected' : '' ?>>سنوي</option>
                        </select>
                    </label>
                    <label>
                        النزول عند عدم الطلب (أيام)
                        <input type="number" name="tier_inactivity_days" min="0" step="1" value="<?= (int)$tierInactivityDays ?>">
                    </label>
                    <div style="grid-column:1/-1;color:#64748b;font-size:13px;line-height:1.8;">
                        <strong>ملاحظة:</strong> تتم إضافة Tier Points فقط للطلبات بحالة <strong>تم التسليم</strong>. وفي الوضع السنوي يعاد احتساب المسار على آخر 365 يوم.
                    </div>
                    <div>
                        <button class="btn btn-primary" type="submit"><i class="fa-solid fa-floppy-disk"></i> حفظ الإعدادات العامة</button>
                    </div>
                </form>
            </div>

            <div class="nay-card">
                <h3>إنشاء / تعديل مستوى</h3>
                <form method="post" style="display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;">
                    <input type="hidden" name="action" value="save_tier">
                    <input type="hidden" name="tier_id" value="0">
                    <label>
                        اسم المستوى
                        <input type="text" name="title" placeholder="مثلاً: Gold" required>
                    </label>
                    <label>
                        Slug
                        <input type="text" name="slug" placeholder="gold">
                    </label>
                    <input type="hidden" name="min_total_spent" value="0">
                    <input type="hidden" name="min_total_orders" value="0">
                    <label>
                        نقاط المستوى المطلوبة
                        <input type="number" name="min_points" min="0" value="0">
                    </label>
                    <label>
                        خصم إضافي %
                        <input type="number" name="extra_discount_percent" min="0" max="100" step="0.01" value="0">
                    </label>
                    <label style="grid-column:1/-1;">
                        عروض حد أدنى مرتبطة بالمستوى (IDs مفصولة بفواصل)
                        <input type="text" name="threshold_promotion_ids" placeholder="مثال: 3,5,8">
                        <small>العروض المتوفرة: <?php foreach ($thresholdPromotions as $promo): ?><span style="display:inline-block;margin:0 4px 4px 0;padding:4px 8px;border-radius:999px;background:#f8fafc;border:1px solid #e2e8f0;">#<?= (int)$promo['id'] ?> <?= e((string)$promo['title']) ?></span><?php endforeach; ?></small>
                    </label>
                    <label>
                        لون المستوى
                        <input type="text" name="color_hex" value="#8B5CF6">
                    </label>
                    <label>
                        الترتيب
                        <input type="number" name="sort_order" min="0" value="0">
                    </label>
                    <label style="display:flex;align-items:center;gap:10px;">
                        <input type="checkbox" name="is_active" value="1" checked style="width:auto;min-height:auto;"> مفعل
                    </label>
                    <label style="grid-column:1/-1;">
                        وصف
                        <textarea name="description" placeholder="مثلاً: مستوى العملاء الأكثر نشاطًا"></textarea>
                    </label>
                    <label style="grid-column:1/-1;">
                        مزايا المستوى
                        <textarea name="benefits_text" placeholder="مثلاً: خصم 5% + منتجات محددة بسعر مستوى خاص"></textarea>
                    </label>
                    <div>
                        <button class="btn btn-primary" type="submit"><i class="fa-solid fa-crown"></i> حفظ المستوى</button>
                    </div>
                </form>
            </div>

            <div class="nay-card">
                <h3>ربط مستوى بزبون</h3>
                <form method="post" style="display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;">
                    <input type="hidden" name="action" value="assign_tier">
                    <label>
                        الزبون
                        <select name="customer_id" required>
                            <option value="">اختاري الزبون</option>
                            <?php foreach ($customerMap as $id => $label): ?>
                                <option value="<?= (int)$id ?>"><?= e($label) ?></option>
                            <?php endforeach; ?>
                        </select>
                    </label>
                    <label>
                        المستوى
                        <select name="assign_tier_id" required>
                            <option value="">اختاري المستوى</option>
                            <?php foreach ($tiers as $tier): ?>
                                <option value="<?= (int)$tier['id'] ?>"><?= e((string)$tier['title']) ?></option>
                            <?php endforeach; ?>
                        </select>
                    </label>
                    <label style="grid-column:1/-1;">
                        ملاحظة
                        <textarea name="assign_note" placeholder="سبب الترقية أو الربط اليدوي"></textarea>
                    </label>
                    <div>
                        <button class="btn btn-primary" type="submit"><i class="fa-solid fa-user-tag"></i> ربط المستوى</button>
                    </div>
                </form>
            </div>
        </div>

        <div class="nay-card">
            <h3>المستويات الحالية</h3>
            <?php if (!$tiers): ?>
                <div class="nay-empty">بعده ماكو مستويات معرفة.</div>
            <?php else: ?>
                <div class="nay-table-wrap">
                    <table class="nay-table">
                        <thead>
                            <tr>
                                <th>#</th>
                                <th>المستوى</th>
                                <th>الشروط</th>
                                <th>المزايا</th>
                                <th>اللون</th>
                                <th>الحالة</th>
                                <th>إجراء</th>
                            </tr>
                        </thead>
                        <tbody>
                        <?php foreach ($tiers as $tier): ?>
                            <tr>
                                <td><?= (int)$tier['id'] ?></td>
                                <td><strong><?= e((string)$tier['title']) ?></strong><br><small><?= e((string)$tier['slug']) ?></small></td>
                                <td>نقاط المستوى: <?= number_format((int)$tier['min_points']) ?><br>خصم إضافي: <?= number_format((float)($tier['extra_discount_percent'] ?? 0), 2) ?>%<br>عروض مرتبطة: <?= e((string)($tier['threshold_promotion_ids'] ?? '-')) ?></td>
                                <td><?= nl2br(e((string)($tier['benefits_text'] ?? '-'))) ?></td>
                                <td><span class="pill" style="background:<?= e((string)$tier['color_hex']) ?>20;border-color:<?= e((string)$tier['color_hex']) ?>;color:#111827;"><?= e((string)$tier['color_hex']) ?></span></td>
                                <td><?= (int)$tier['is_active'] === 1 ? hub_status_badge('مفعل', 'success') : hub_status_badge('موقوف', 'warn') ?></td>
                                <td><a class="btn btn-danger" href="?delete=<?= (int)$tier['id'] ?>" onclick="return confirm('حذف المستوى؟')">حذف</a></td>
                            </tr>
                        <?php endforeach; ?>
                        </tbody>
                    </table>
                </div>
            <?php endif; ?>
        </div>

        <div class="nay-grid-two">
            <div class="nay-card">
                <h3>آخر ربط للمستويات</h3>
                <?php if (!$historyRows): ?>
                    <div class="nay-empty">ماكو سجل ربط لحد الآن.</div>
                <?php else: ?>
                    <div class="nay-table-wrap">
                        <table class="nay-table">
                            <thead>
                                <tr><th>الزبون</th><th>المستوى</th><th>الملاحظة</th><th>بواسطة</th><th>التاريخ</th></tr>
                            </thead>
                            <tbody>
                            <?php foreach ($historyRows as $row): ?>
                                <tr>
                                    <td><?= e((string)$row['full_name']) ?></td>
                                    <td><?= e((string)$row['tier_title']) ?></td>
                                    <td><?= e((string)($row['note'] ?? '-')) ?></td>
                                    <td><?= e((string)($row['admin_name'] ?? '-')) ?></td>
                                    <td><?= e((string)$row['created_at']) ?></td>
                                </tr>
                            <?php endforeach; ?>
                            </tbody>
                        </table>
                    </div>
                <?php endif; ?>
            </div>

            <div class="nay-card">
                <h3>أحدث العملاء ومستوياتهم</h3>
                <?php if (!$assignmentRows): ?>
                    <div class="nay-empty">ماكو عملاء للعرض.</div>
                <?php else: ?>
                    <div class="nay-table-wrap">
                        <table class="nay-table">
                            <thead>
                                <tr><th>الزبون</th><th>المستوى الحالي</th><th>النقاط</th><th>الطلبات</th><th>الصرف</th></tr>
                            </thead>
                            <tbody>
                            <?php foreach ($assignmentRows as $row): ?>
                                <tr>
                                    <td><?= e((string)$row['full_name']) ?><br><small><?= e((string)$row['phone']) ?></small></td>
                                    <td><?= !empty($row['tier_title']) ? '<span class="pill" style="background:' . e((string)($row['color_hex'] ?? '#e5e7eb')) . '20;border-color:' . e((string)($row['color_hex'] ?? '#e5e7eb')) . ';color:#111827;">' . e((string)$row['tier_title']) . '</span>' : '<span class="nay-muted">غير محدد</span>' ?></td>
                                    <td><?= number_format((int)$row['points_balance']) ?></td>
                                    <td><?= number_format((int)$row['total_orders']) ?></td>
                                    <td><?= number_format((float)$row['total_spent'], 0) ?> د.ع</td>
                                </tr>
                            <?php endforeach; ?>
                            </tbody>
                        </table>
                    </div>
                <?php endif; ?>
            </div>
        </div>
    </div>
</div>
<?php require_once __DIR__ . '/../includes/footer.php'; ?>
