<?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 === 'wallet_adjustment') {
        $customerId = (int)post('customer_id', 0);
        $direction = (string)post('direction', 'credit');
        $amount = max(0, (float)post('amount', 0));
        $sourceType = trim((string)post('source_type', 'admin'));
        $sourceRef = trim((string)post('source_ref', ''));
        $note = trim((string)post('note', ''));
        if ($customerId <= 0 || $amount <= 0) {
            set_flash('error', 'اختاري زبون وأدخلي مبلغ صالح.');
        } else {
            $ok = v3_create_wallet_tx($db, $customerId, $direction, $amount, $sourceType, $sourceRef, $note, v3_admin_id());
            set_flash($ok ? 'success' : 'error', $ok ? 'تم تسجيل حركة المحفظة وتحديث الرصيد.' : 'تعذر حفظ حركة المحفظة.');
        }
        redirect_to(admin_url('wallet/index.php'));
    }
}

$flash = get_flash();
$customerMap = v3_customer_name_map($db);
$walletDirectionExpr = hub_column_exists($db, 'customer_wallet_transactions', 'direction')
    ? "COALESCE(NULLIF(t.direction,''), CASE WHEN LOWER(COALESCE(t.txn_type,'')) IN ('debit','withdraw','withdrawal','refund_debit','chargeback') OR t.amount < 0 THEN 'debit' ELSE 'credit' END)"
    : "CASE WHEN LOWER(COALESCE(t.txn_type,'')) IN ('debit','withdraw','withdrawal','refund_debit','chargeback') OR t.amount < 0 THEN 'debit' ELSE 'credit' END";
$stats = [
    'customers_with_balance' => (int)hub_fetch_value($db, 'SELECT COUNT(*) AS c FROM customers WHERE wallet_balance > 0'),
    'total_balance' => (float)hub_fetch_value($db, 'SELECT COALESCE(SUM(wallet_balance),0) AS c FROM customers', 'c', 0.0),
    'credits' => (float)hub_fetch_value($db, "SELECT COALESCE(SUM(ABS(amount)),0) AS c FROM customer_wallet_transactions t WHERE {$walletDirectionExpr} = 'credit'", 'c', 0.0),
    'debits' => (float)hub_fetch_value($db, "SELECT COALESCE(SUM(ABS(amount)),0) AS c FROM customer_wallet_transactions t WHERE {$walletDirectionExpr} = 'debit'", 'c', 0.0),
    'tx_count' => hub_table_count($db, 'customer_wallet_transactions'),
];
$topBalances = hub_fetch_all($db, "SELECT id, full_name, phone, wallet_balance, total_orders, total_spent FROM customers WHERE wallet_balance > 0 ORDER BY wallet_balance DESC, total_spent DESC LIMIT 12");
$recentTx = hub_fetch_all($db, "SELECT t.*, {$walletDirectionExpr} AS wallet_direction, COALESCE(NULLIF(t.source_type,''), t.source) AS source_display, COALESCE(NULLIF(t.note,''), t.notes) AS note_display, c.full_name, c.phone, a.full_name AS admin_name FROM customer_wallet_transactions t LEFT JOIN customers c ON c.id = t.customer_id LEFT JOIN admins a ON a.id = t.created_by_admin_id ORDER BY t.id DESC LIMIT 20");
$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>صفحة تشغيلية لإدارة أرصدة الزبائن، تنفيذ حركات يدويّة، ومراجعة سجل المحفظة حتى يصير كل دينار داخل النظام واضح وقابل للمراجعة.</p>
            </div>
            <div class="nay-actions">
                <a class="nay-btn" href="/app/admin/customers/list.php"><i class="fa-solid fa-users"></i> الزبائن</a>
                <a class="nay-btn" href="/app/admin/orders/index.php"><i class="fa-solid fa-cart-shopping"></i> الطلبات</a>
            </div>
        </div>

        <div class="nay-stats-grid">
            <div class="nay-card"><div class="nay-stat-label">عملاء عندهم رصيد</div><div class="nay-stat-value"><?= number_format($stats['customers_with_balance']) ?></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($stats['total_balance'], 2) ?></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($stats['credits'], 2) ?></div><div class="nay-stat-sub">Credit movements</div></div>
            <div class="nay-card"><div class="nay-stat-label">إجمالي الخصومات</div><div class="nay-stat-value"><?= number_format($stats['debits'], 2) ?></div><div class="nay-stat-sub">Debit movements</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>

        <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="wallet_adjustment">
                    <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="direction">
                            <option value="credit">إضافة رصيد</option>
                            <option value="debit">خصم رصيد</option>
                        </select>
                    </label>
                    <label>
                        المبلغ
                        <input type="number" min="0" step="0.01" name="amount" required>
                    </label>
                    <label>
                        مصدر الحركة
                        <select name="source_type">
                            <option value="admin">يدوي من الأدمن</option>
                            <option value="refund">استرجاع</option>
                            <option value="referral_reward">مكافأة إحالة</option>
                            <option value="adjustment">تعديل تشغيلي</option>
                        </select>
                    </label>
                    <label>
                        رقم مرجعي
                        <input type="text" name="source_ref" placeholder="مثلاً: ORD-123 أو REF-5">
                    </label>
                    <label style="grid-column:1/-1;">
                        ملاحظة
                        <textarea name="note" placeholder="سبب الإضافة أو الخصم"></textarea>
                    </label>
                    <div>
                        <button type="submit" class="btn btn-primary"><i class="fa-solid fa-wallet"></i> تنفيذ الحركة</button>
                    </div>
                </form>
            </div>

            <div class="nay-card">
                <h3>ملاحظات تشغيلية</h3>
                <div class="nay-list">
                    <div class="nay-list-item"><span>الرصيد الحالي للعميل</span><strong>يتحدث تلقائيًا</strong></div>
                    <div class="nay-list-item"><span>كل حركة تنسجل بتاريخ ومصدر</span><strong>مدعوم</strong></div>
                    <div class="nay-list-item"><span>مناسب لمكافآت الإحالة والاسترجاع</span><strong>نعم</strong></div>
                    <div class="nay-list-item"><span>مراجعة السجل حسب الزبون</span><strong>من الجدول بالأسفل</strong></div>
                </div>
            </div>
        </div>

        <div class="nay-card">
            <h3>أعلى الأرصدة</h3>
            <?php if (!$topBalances): ?>
                <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 ($topBalances as $row): ?>
                            <tr>
                                <td><?= (int)$row['id'] ?></td>
                                <td><?= e((string)$row['full_name']) ?><br><small><?= e((string)$row['phone']) ?></small></td>
                                <td><strong><?= number_format((float)$row['wallet_balance'], 2) ?></strong></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 class="nay-card">
            <h3>آخر حركات المحفظة</h3>
            <?php if (!$recentTx): ?>
                <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>
                                <th>بواسطة</th>
                                <th>التاريخ</th>
                            </tr>
                        </thead>
                        <tbody>
                        <?php foreach ($recentTx as $row): ?>
                            <tr>
                                <td><?= (int)$row['id'] ?></td>
                                <td><?= e((string)$row['full_name']) ?><br><small><?= e((string)$row['phone']) ?></small></td>
                                <td><?= hub_status_badge((string)$row['direction'], (string)$row['direction'] === 'credit' ? 'success' : 'warn') ?></td>
                                <td><?= number_format((float)$row['amount'], 2) ?></td>
                                <td><?= number_format((float)$row['balance_after'], 2) ?></td>
                                <td><?= e((string)$row['source_type']) ?><?php if (!empty($row['source_ref'])): ?><br><small><?= e((string)$row['source_ref']) ?></small><?php endif; ?></td>
                                <td><?= e((string)($row['note_display'] ?? '-')) ?></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>
</div>
<?php require_once __DIR__ . '/../includes/footer.php'; ?>
