<?php
require_once __DIR__ . '/../includes/config.php';
require_once __DIR__ . '/../includes/auth.php';
require_once __DIR__ . '/../includes/module_hub_helpers.php';

$db = hub_db();
$page_title = 'مركز الولاء';
$message = '';
$messageType = 'success';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'adjust_points' && $db) {
    $customerId = (int)($_POST['customer_id'] ?? 0);
    $delta = (int)($_POST['points_delta'] ?? 0);
    $notes = trim((string)($_POST['notes'] ?? ''));
    if ($customerId <= 0 || $delta === 0) {
        $message = 'اختيار الزبون والنقاط مطلوبين.';
        $messageType = 'error';
    } elseif (!hub_table_exists($db, 'customers')) {
        $message = 'جدول الزبائن غير موجود.';
        $messageType = 'error';
    } else {
        $stmt = $db->prepare("UPDATE customers SET points_balance = GREATEST(0, COALESCE(points_balance, 0) + ?) WHERE id = ? LIMIT 1");
        $stmt->bind_param('ii', $delta, $customerId);
        $ok = $stmt->execute();
        $affected = $stmt->affected_rows;
        $stmt->close();

        if ($ok && $affected > 0) {
            if (hub_table_exists($db, 'customer_loyalty_transactions')) {
                $balanceRow = hub_fetch_all($db, "SELECT points_balance FROM customers WHERE id = " . $customerId . " LIMIT 1");
                $balanceAfter = (int)(($balanceRow[0]['points_balance'] ?? 0));
                $txnType = $delta > 0 ? 'manual_add' : 'manual_deduct';
                $redemptionType = 'amount';
                $rewardTitle = '';
                $adminId = function_exists('current_admin_id') ? current_admin_id() : 0;
                $txn = $db->prepare("INSERT INTO customer_loyalty_transactions (customer_id, admin_id, txn_type, points_delta, balance_after, redemption_type, reward_title, notes) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
                $txn->bind_param('iisiiiss', $customerId, $adminId, $txnType, $delta, $balanceAfter, $redemptionType, $rewardTitle, $notes);
                $txn->execute();
                $txn->close();
            }
            $message = 'تم تعديل نقاط الزبون بنجاح.';
            $messageType = 'success';
        } else {
            $message = 'تعذر تعديل النقاط.';
            $messageType = 'error';
        }
    }
}

$settings = hub_settings_map($db);
$customers = hub_table_exists($db, 'customers')
    ? hub_fetch_all($db, "SELECT id, full_name, phone, points_balance, status, total_orders, total_spent FROM customers WHERE status = 1 ORDER BY points_balance DESC, id DESC LIMIT 25")
    : [];
$recentTransactions = hub_table_exists($db, 'customer_loyalty_transactions')
    ? hub_fetch_all($db, "SELECT t.*, c.full_name, c.phone, o.order_number FROM customer_loyalty_transactions t LEFT JOIN customers c ON c.id = t.customer_id LEFT JOIN orders o ON o.id = t.order_id ORDER BY t.id DESC LIMIT 40")
    : [];
$pendingOrders = hub_table_exists($db, 'orders')
    ? hub_fetch_all($db, "SELECT id, order_number, customer_name, loyalty_points_earned, loyalty_points_awarded, total_amount, order_status, created_at FROM orders WHERE COALESCE(loyalty_points_earned, 0) > COALESCE(loyalty_points_awarded, 0) ORDER BY id DESC LIMIT 20")
    : [];

$stats = [
    'enabled' => hub_setting_enabled($db, 'loyalty_enabled', false),
    'customers_with_points' => 0,
    'points_pool' => 0,
    'tx_count' => count($recentTransactions),
    'pending_orders' => count($pendingOrders),
];
foreach ($customers as $customer) {
    $points = (int)($customer['points_balance'] ?? 0);
    if ($points > 0) {
        $stats['customers_with_points']++;
        $stats['points_pool'] += $points;
    }
}

require_once __DIR__ . '/../includes/header.php';
require_once __DIR__ . '/../includes/sidebar.php';
?>
<div class="nay-dashboard-page">
    <div class="nay-dashboard-main">
        <div class="nay-dashboard-hero">
            <div>
                <h1>مركز الولاء</h1>
                <p>إدارة إعدادات النقاط، متابعة أرصدة الزبائن، مراجعة الحركات، وتعديل النقاط يدويًا من مكان واحد.</p>
            </div>
            <div class="nay-actions">
                <a class="nay-btn primary" href="/app/admin/settings/loyalty.php"><i class="fa-solid fa-gear"></i> إعدادات الولاء</a>
                <a class="nay-btn" href="/app/admin/customers/index.php"><i class="fa-solid fa-users"></i> الزبائن</a>
            </div>
        </div>

        <?php if ($message !== ''): ?>
            <div class="<?= $messageType === 'error' ? 'flash flash-error' : 'flash flash-success' ?>" style="margin-bottom:16px"><?= hub_h($message) ?></div>
        <?php endif; ?>

        <div class="nay-stats-grid">
            <div class="nay-card"><div class="nay-stat-label">البرنامج</div><div class="nay-stat-value"><?= $stats['enabled'] ? 'ON' : 'OFF' ?></div><div class="nay-stat-sub">حسب الإعدادات</div></div>
            <div class="nay-card"><div class="nay-stat-label">زبائن عندهم نقاط</div><div class="nay-stat-value"><?= number_format((int)$stats['customers_with_points']) ?></div><div class="nay-stat-sub">أرصدة حالية</div></div>
            <div class="nay-card"><div class="nay-stat-label">إجمالي الرصيد</div><div class="nay-stat-value"><?= number_format((int)$stats['points_pool']) ?></div><div class="nay-stat-sub">كل النقاط الحالية</div></div>
            <div class="nay-card"><div class="nay-stat-label">حركات أخيرة</div><div class="nay-stat-value"><?= number_format((int)$stats['tx_count']) ?></div><div class="nay-stat-sub">من سجل الولاء</div></div>
            <div class="nay-card"><div class="nay-stat-label">طلبات بانتظار اعتماد</div><div class="nay-stat-value"><?= number_format((int)$stats['pending_orders']) ?></div><div class="nay-stat-sub">نقاط مكتسبة لم تعتمد بعد</div></div>
            <div class="nay-card"><div class="nay-stat-label">كل كم مبلغ تكسب نقطة</div><div class="nay-stat-value"><?= number_format((float)hub_setting($db, 'loyalty_points_per_amount', '10000'), 0) ?></div><div class="nay-stat-sub">د.ع لكل نقطة</div></div>
            <div class="nay-card"><div class="nay-stat-label">قيمة النقطة</div><div class="nay-stat-value"><?= number_format((float)hub_setting($db, 'loyalty_amount_per_point', '100'), 0) ?></div><div class="nay-stat-sub">د.ع عند الاستبدال</div></div>
            <div class="nay-card"><div class="nay-stat-label">حد الاستبدال الأدنى</div><div class="nay-stat-value"><?= number_format((int)hub_setting($db, 'loyalty_min_points_redeem', '100')) ?></div><div class="nay-stat-sub">نقطة</div></div>
        </div>

        <div class="nay-grid-two">
            <div class="nay-card">
                <h3>قواعد الولاء الحالية</h3>
                <div class="nay-list">
                    <div class="nay-list-item"><span>استخدام النقاط مع البروموكود</span><strong><?= hub_setting_enabled($db, 'loyalty_allow_with_promo', true) ? 'مسموح' : 'غير مسموح' ?></strong></div>
                    <div class="nay-list-item"><span>استخدام النقاط مع العروض</span><strong><?= hub_setting_enabled($db, 'loyalty_allow_with_offers', true) ? 'مسموح' : 'غير مسموح' ?></strong></div>
                    <div class="nay-list-item"><span>طريقة الاستبدال</span><strong><?= hub_setting($db, 'loyalty_redeem_type', 'amount') === 'gift' ? 'هدية / مكافأة' : 'خصم مالي' ?></strong></div>
                    <div class="nay-list-item"><span>عنوان الهدية</span><strong><?= hub_h(hub_setting($db, 'loyalty_gift_reward_title', 'هدية نقاط الولاء')) ?></strong></div>
                    <div class="nay-list-item"><span>الحد الأعلى لكل طلب</span><strong><?= (int)hub_setting($db, 'loyalty_max_points_per_order', '0') > 0 ? number_format((int)hub_setting($db, 'loyalty_max_points_per_order', '0')) . ' نقطة' : 'غير محدود' ?></strong></div>
                </div>
            </div>

            <div class="nay-card">
                <h3>تعديل نقاط يدوي</h3>
                <form method="post" class="nay-form-grid">
                    <input type="hidden" name="action" value="adjust_points">
                    <div>
                        <label class="nay-label">الزبون</label>
                        <select class="nay-input" name="customer_id" required>
                            <option value="">اختيار الزبون</option>
                            <?php foreach ($customers as $customer): ?>
                                <option value="<?= (int)$customer['id'] ?>"><?= hub_h((string)$customer['full_name']) ?> — <?= hub_h((string)$customer['phone']) ?> (<?= (int)$customer['points_balance'] ?>)</option>
                            <?php endforeach; ?>
                        </select>
                    </div>
                    <div>
                        <label class="nay-label">تغيير النقاط</label>
                        <input class="nay-input" type="number" name="points_delta" required placeholder="مثال: 50 أو -25">
                    </div>
                    <div style="grid-column:1/-1">
                        <label class="nay-label">ملاحظات</label>
                        <textarea class="nay-input" name="notes" rows="3" placeholder="سبب الإضافة أو السحب"></textarea>
                    </div>
                    <div style="grid-column:1/-1;display:flex;gap:10px;justify-content:flex-end">
                        <button class="nay-btn primary" type="submit">حفظ الحركة</button>
                    </div>
                </form>
            </div>
        </div>

        <div class="nay-grid-two">
            <div class="nay-card">
                <div class="nay-card-header-inline"><h3>أعلى أرصدة الزبائن</h3><span><?= count($customers) ?> زبون</span></div>
                <?php if (!$customers): ?>
                    <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 ($customers as $customer): ?>
                                <tr>
                                    <td><strong><?= hub_h((string)$customer['full_name']) ?></strong></td>
                                    <td><?= hub_h((string)$customer['phone']) ?></td>
                                    <td><?= number_format((int)($customer['points_balance'] ?? 0)) ?></td>
                                    <td><?= number_format((int)($customer['total_orders'] ?? 0)) ?></td>
                                    <td><?= hub_format_iqd((float)($customer['total_spent'] ?? 0)) ?></td>
                                </tr>
                            <?php endforeach; ?>
                            </tbody>
                        </table>
                    </div>
                <?php endif; ?>
            </div>

            <div class="nay-card">
                <div class="nay-card-header-inline"><h3>طلبات تنتظر اعتماد النقاط</h3><span><?= count($pendingOrders) ?> طلب</span></div>
                <?php if (!$pendingOrders): ?>
                    <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 ($pendingOrders as $order): ?>
                                <tr>
                                    <td><?= hub_h((string)($order['order_number'] ?? ('#' . (int)$order['id']))) ?></td>
                                    <td><?= hub_h((string)($order['customer_name'] ?? '-')) ?></td>
                                    <td><?= number_format((int)($order['loyalty_points_earned'] ?? 0)) ?></td>
                                    <td><?= hub_h((string)($order['order_status'] ?? '-')) ?></td>
                                    <td><?= hub_h((string)($order['created_at'] ?? '-')) ?></td>
                                </tr>
                            <?php endforeach; ?>
                            </tbody>
                        </table>
                    </div>
                <?php endif; ?>
            </div>
        </div>

        <div class="nay-card">
            <div class="nay-card-header-inline"><h3>آخر حركات الولاء</h3><span><?= count($recentTransactions) ?> حركة</span></div>
            <?php if (!$recentTransactions): ?>
                <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 ($recentTransactions as $txn): ?>
                            <tr>
                                <td><?= hub_h((string)($txn['full_name'] ?? '-')) ?><div class="muted"><?= hub_h((string)($txn['phone'] ?? '')) ?></div></td>
                                <td><?= hub_h((string)($txn['txn_type'] ?? '-')) ?></td>
                                <td><?= (int)($txn['points_delta'] ?? 0) > 0 ? '+' : '' ?><?= number_format((int)($txn['points_delta'] ?? 0)) ?></td>
                                <td><?= number_format((int)($txn['balance_after'] ?? 0)) ?></td>
                                <td><?= hub_h((string)($txn['order_number'] ?? '-')) ?></td>
                                <td><?= hub_h((string)($txn['created_at'] ?? '-')) ?></td>
                                <td><?= hub_h((string)($txn['notes'] ?? '-')) ?></td>
                            </tr>
                        <?php endforeach; ?>
                        </tbody>
                    </table>
                </div>
            <?php endif; ?>
        </div>
    </div>
</div>
<style>
.nay-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.nay-label{display:block;margin-bottom:6px;font-size:13px;font-weight:700;color:#334155}
.nay-input{width:100%;padding:11px 12px;border:1px solid #dbe3ef;border-radius:12px;background:#fff;font:inherit}
textarea.nay-input{resize:vertical}
@media(max-width:768px){.nay-form-grid{grid-template-columns:1fr}}
</style>
<?php require_once __DIR__ . '/../includes/footer.php'; ?>
