<?php
session_start();
require_once 'config/database.php';
require_once 'config/settings.php';
require_once 'includes/auth.php';
require_once 'includes/functions.php';

Auth::requireLogin();
Auth::checkSessionTimeout();

$db       = Database::getInstance()->getConnection();
$settings = SiteSettings::getInstance();
$user     = Auth::currentUser();
$user_id  = $_SESSION['user_id'];
$pageTitle = 'کیف پول | کیف‌لند';
$success = ''; $error = '';

// ========================================
// شارژ آنلاین با زرین‌پال
// ========================================
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['charge_online'])) {
    if (!Auth::verifyCSRFToken($_POST['csrf_token'] ?? '')) {
        $error = 'خطای امنیتی.';
    } elseif (Auth::isFormRateLimited('wallet_charge_' . $user_id, 10)) {
        $error = 'تعداد درخواست‌های زیادی ارسال کرده‌اید.';
    } else {
        $amount = (int)preg_replace('/[^0-9]/', '', $_POST['amount'] ?? 0);
        if ($amount < 50000)     { $error = 'حداقل مبلغ شارژ ۵۰،۰۰۰ تومان است.'; }
        elseif ($amount > 50000000) { $error = 'حداکثر مبلغ شارژ ۵۰،۰۰۰،۰۰۰ تومان است.'; }
        else {
            try {
                $stmt = $db->prepare("INSERT INTO wallet_transactions (user_id, type, amount, balance_after, description, status, created_at) VALUES (?, 'charge', ?, ?, 'شارژ آنلاین کیف پول', 'pending', NOW())");
                $stmt->execute([$user_id, $amount, $user['wallet_balance']]);
                $txId = $db->lastInsertId();

                require_once 'payment/zarinpal.php';
                $merchantId  = $settings->get('zarinpal_merchant') ?: ZARINPAL_MERCHANT_ID;
                $callbackUrl = (isset($_SERVER['HTTPS'])?'https':'http') . '://' . $_SERVER['HTTP_HOST'] . '/wallet-callback.php';
                $zarinpal    = new ZarinPal($merchantId, $callbackUrl);
                $result      = $zarinpal->request($amount, 'شارژ کیف پول کیف‌لند', $user['email'], $user['phone'] ?? '');

                if ($result['success']) {
                    $db->prepare("UPDATE wallet_transactions SET authority=? WHERE id=?")->execute([$result['authority'], $txId]);
                    header('Location: ' . $result['url']); exit;
                } else {
                    $db->prepare("UPDATE wallet_transactions SET status='failed' WHERE id=?")->execute([$txId]);
                    $error = 'خطا در اتصال به درگاه: ' . $result['error'];
                }
            } catch (Exception $e) { $error = 'خطای سیستمی.'; error_log($e->getMessage()); }
        }
    }
}

// ========================================
// شارژ کارت به کارت
// ========================================
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['charge_card'])) {
    if (!Auth::verifyCSRFToken($_POST['csrf_token'] ?? '')) {
        $error = 'خطای امنیتی.';
    } else {
        $amount  = (int)preg_replace('/[^0-9]/', '', $_POST['amount'] ?? 0);
        $receipt = trim($_POST['receipt_number'] ?? '');

        if ($amount < 50000)     { $error = 'حداقل مبلغ ۵۰،۰۰۰ تومان است.'; }
        elseif (empty($receipt)) { $error = 'لطفاً شماره پیگیری واریز را وارد کنید.'; }
        else {
            try {
                // ثبت تراکنش در انتظار تأیید ادمین
                $stmt = $db->prepare("INSERT INTO wallet_transactions (user_id, type, amount, balance_after, description, ref_id, status, created_at) VALUES (?, 'charge', ?, ?, ?, ?, 'pending', NOW())");
                $stmt->execute([$user_id, $amount, $user['wallet_balance'], 'شارژ کارت‌به‌کارت — در انتظار تأیید', $receipt]);
                Auth::logActivity('wallet_card_charge_request', "درخواست شارژ کارت‌به‌کارت: " . number_format($amount) . " تومان | پیگیری: $receipt");

                // ایمیل به ادمین
                try {
                    $adminEmail = SiteSettings::getInstance()->get('site_email', 'admin@bagshop.com');
                    $siteHost   = (isset($_SERVER['HTTPS'])?'https':'http').'://'.$_SERVER['HTTP_HOST'];
                    $emailBody  = '
                    <p>درخواست شارژ کیف پول از طریق کارت‌به‌کارت دریافت شد.</p>
                    <table border="0" cellpadding="10" style="width:100%;border-collapse:collapse;background:#f8f9fa;border-radius:8px;">
                        <tr><td style="color:#555;width:40%">نام کاربر:</td><td><strong>' . htmlspecialchars($user['full_name']) . '</strong></td></tr>
                        <tr style="background:#fff"><td style="color:#555">ایمیل:</td><td>' . htmlspecialchars($user['email']) . '</td></tr>
                        <tr><td style="color:#555">موبایل:</td><td>' . htmlspecialchars($user['phone'] ?? '—') . '</td></tr>
                        <tr style="background:#fff"><td style="color:#555">مبلغ واریزی:</td><td><strong style="color:#8b5cf6;font-size:18px">' . number_format($amount) . ' تومان</strong></td></tr>
                        <tr><td style="color:#555">شماره پیگیری:</td><td><strong style="font-family:monospace;font-size:16px;color:#1d4ed8">' . htmlspecialchars($receipt) . '</strong></td></tr>
                        <tr style="background:#fff"><td style="color:#555">تاریخ:</td><td>' . date('Y/m/d H:i:s') . '</td></tr>
                    </table>
                    <div style="text-align:center;margin:24px 0">
                        <a href="' . $siteHost . '/admin/wallet.php"
                           style="background:#8b5cf6;color:#fff;padding:14px 32px;border-radius:10px;text-decoration:none;font-weight:700;font-size:15px;display:inline-block">
                            تأیید یا رد در پنل ادمین
                        </a>
                    </div>';
                    sendEmail($adminEmail, 'درخواست شارژ کیف پول — ' . number_format($amount) . ' تومان', $emailBody);
                } catch (Exception $emailEx) {
                    error_log("Wallet admin email error: " . $emailEx->getMessage());
                }

                $success = 'درخواست شارژ ثبت شد. پس از تأیید ادمین موجودی افزایش می‌یابد.';
            } catch (Exception $e) { $error = 'خطای سیستمی.'; }
        }
    }
}

// موجودی به‌روز
$balanceStmt = $db->prepare("SELECT wallet_balance FROM users WHERE id = ?");
$balanceStmt->execute([$user_id]);
$walletBalance = (int)$balanceStmt->fetchColumn();

// تراکنش‌ها
$page    = max(1,(int)($_GET['page']??1));
$perPage = 10;
$offset  = ($page-1)*$perPage;
$total   = $db->prepare("SELECT COUNT(*) FROM wallet_transactions WHERE user_id = ?");
$total->execute([$user_id]);
$totalTx    = $total->fetchColumn();
$totalPages = ceil($totalTx/$perPage);
$stmt = $db->prepare("SELECT * FROM wallet_transactions WHERE user_id = ? ORDER BY created_at DESC LIMIT ? OFFSET ?");
$stmt->execute([$user_id, $perPage, $offset]);
$transactions = $stmt->fetchAll();

$cardNumber = $settings->get('card_number','');
$cardOwner  = $settings->get('card_owner','');
$cardBank   = $settings->get('card_bank','');

$csrfToken = Auth::generateCSRFToken();
include 'includes/header.php';
?>

<section class="wallet-page">
    <div class="wallet-header">
        <h1><i class="fas fa-wallet"></i> کیف پول من</h1>
        <a href="profile.php" class="back-btn"><i class="fas fa-arrow-right"></i> بازگشت</a>
    </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="balance-card">
        <div class="balance-bg"></div>
        <div class="balance-content">
            <div class="balance-label"><i class="fas fa-wallet"></i> موجودی فعلی</div>
            <div class="balance-amount"><?= number_format($walletBalance) ?> <span>تومان</span></div>
            <div class="balance-note">قابل استفاده در خرید بعدی</div>
        </div>
    </div>

    <!-- تب‌های شارژ -->
    <div class="charge-tabs">
        <button class="tab-btn active" onclick="switchTab('online',this)">
            <i class="fas fa-credit-card"></i> پرداخت آنلاین
        </button>
        <button class="tab-btn" onclick="switchTab('card',this)">
            <i class="fas fa-exchange-alt"></i> کارت به کارت
        </button>
    </div>

    <!-- فرم آنلاین -->
    <div class="charge-panel" id="tab-online">
        <div class="charge-card">
            <h3><i class="fas fa-shield-alt" style="color:#8B5CF6;"></i> شارژ آنلاین با زرین‌پال</h3>
            <form method="POST" id="onlineForm">
                <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($csrfToken) ?>">
                <div class="quick-amounts">
                    <?php foreach ([100000,200000,500000,1000000] as $qa): ?>
                    <button type="button" class="quick-btn" onclick="setAmount('onlineAmount',<?= $qa ?>)">
                        <?= number_format($qa/1000) ?>K
                    </button>
                    <?php endforeach; ?>
                </div>
                <div class="amount-input-wrap">
                    <input type="text" name="amount" id="onlineAmount" class="amount-input" placeholder="مبلغ به تومان" autocomplete="off">
                    <span class="amount-suffix">تومان</span>
                </div>
                <small class="amount-hint">حداقل ۵۰،۰۰۰ — حداکثر ۵۰،۰۰۰،۰۰۰ تومان</small>
                <button type="submit" name="charge_online" class="btn btn-primary btn-block">
                    <i class="fas fa-lock"></i> پرداخت امن با زرین‌پال
                </button>
            </form>
        </div>
    </div>

    <!-- فرم کارت به کارت -->
    <div class="charge-panel" id="tab-card" style="display:none;">
        <div class="charge-card">
            <h3><i class="fas fa-exchange-alt" style="color:var(--primary);"></i> شارژ کارت به کارت</h3>

            <?php if ($cardNumber): ?>
            <div class="card-info-box" style="margin-bottom:20px;">
                <div class="card-info-header"><i class="fas fa-credit-card"></i> اطلاعات حساب برای واریز</div>
                <div class="card-details">
                    <div class="card-detail-row">
                        <span class="card-label">شماره کارت:</span>
                        <span class="card-value card-number-display" id="walletCardNum"><?= htmlspecialchars($cardNumber) ?></span>
                        <button type="button" class="copy-btn" onclick="copyText('walletCardNum',this)">
                            <i class="fas fa-copy"></i> کپی
                        </button>
                    </div>
                    <?php if ($cardOwner): ?><div class="card-detail-row"><span class="card-label">به نام:</span><span class="card-value"><?= htmlspecialchars($cardOwner) ?></span></div><?php endif; ?>
                    <?php if ($cardBank):  ?><div class="card-detail-row"><span class="card-label">بانک:</span><span class="card-value"><?= htmlspecialchars($cardBank) ?></span></div><?php endif; ?>
                </div>
            </div>
            <?php endif; ?>

            <form method="POST" id="cardForm" data-single-submit>
                <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($csrfToken) ?>">
                <div class="quick-amounts">
                    <?php foreach ([100000,200000,500000,1000000] as $qa): ?>
                    <button type="button" class="quick-btn" onclick="setAmount('cardAmount',<?= $qa ?>)">
                        <?= number_format($qa/1000) ?>K
                    </button>
                    <?php endforeach; ?>
                </div>
                <div class="amount-input-wrap" style="margin-bottom:12px;">
                    <input type="text" name="amount" id="cardAmount" class="amount-input" placeholder="مبلغ واریزی به تومان" autocomplete="off">
                    <span class="amount-suffix">تومان</span>
                </div>
                <div class="form-group" style="margin-bottom:16px;">
                    <label style="display:block;font-size:13px;margin-bottom:6px;color:var(--text-secondary);">شماره پیگیری واریز <span style="color:var(--danger)">*</span></label>
                    <input type="text" name="receipt_number" class="amount-input" placeholder="شماره پیگیری را وارد کنید" required>
                </div>
                <div style="background:rgba(245,158,11,0.1);border:1px solid rgba(245,158,11,0.3);border-radius:10px;padding:12px;font-size:13px;color:var(--warning);margin-bottom:16px;display:flex;gap:8px;">
                    <i class="fas fa-info-circle" style="flex-shrink:0;margin-top:2px;"></i>
                    پس از واریز وجه، شماره پیگیری را وارد کنید. ادمین پس از تأیید موجودی را اضافه می‌کند.
                </div>
                <button type="submit" name="charge_card" class="btn btn-primary btn-block">
                    <i class="fas fa-paper-plane"></i> ثبت درخواست شارژ
                </button>
            </form>
        </div>
    </div>

    <!-- تاریخچه -->
    <div class="tx-section">
        <h3><i class="fas fa-history"></i> تاریخچه تراکنش‌ها</h3>
        <?php if (!empty($transactions)): ?>
        <div class="tx-list">
            <?php foreach ($transactions as $tx): ?>
            <?php
                $isCredit = in_array($tx['type'],['charge','refund','admin_add']);
                $typeInfo = match($tx['type']) {
                    'charge'       => ['icon'=>'fa-arrow-down',   'color'=>'#8b5cf6', 'label'=>'شارژ کیف پول',       'sign'=>'+'],
                    'purchase'     => ['icon'=>'fa-shopping-bag', 'color'=>'#FF3B30', 'label'=>'پرداخت سفارش',       'sign'=>'-'],
                    'refund'       => ['icon'=>'fa-undo',         'color'=>'#8b5cf6', 'label'=>'بازگشت وجه',         'sign'=>'+'],
                    'admin_add'    => ['icon'=>'fa-plus',         'color'=>'#8b5cf6', 'label'=>'افزایش توسط ادمین',  'sign'=>'+'],
                    'admin_deduct' => ['icon'=>'fa-minus',        'color'=>'#FF9500', 'label'=>'کسر توسط ادمین',     'sign'=>'-'],
                    default        => ['icon'=>'fa-circle',       'color'=>'#86868b', 'label'=>$tx['type'],          'sign'=>''],
                };
            ?>
            <div class="tx-item <?= $tx['status']==='failed'?'tx-failed':'' ?>">
                <div class="tx-icon" style="background:<?= $typeInfo['color'] ?>22;color:<?= $typeInfo['color'] ?>;">
                    <i class="fas <?= $typeInfo['icon'] ?>"></i>
                </div>
                <div class="tx-info">
                    <div class="tx-label"><?= $typeInfo['label'] ?></div>
                    <div class="tx-desc"><?= htmlspecialchars($tx['description']??'') ?></div>
                    <div class="tx-date"><?= jdate($tx['created_at']) ?></div>
                </div>
                <div class="tx-amount-col">
                    <div class="tx-amount <?= $isCredit?'tx-credit':'tx-debit' ?>">
                        <?= $typeInfo['sign'] ?><?= number_format($tx['amount']) ?> ت
                    </div>
                    <div class="tx-balance">موجودی: <?= number_format($tx['balance_after']) ?></div>
                    <?php if ($tx['status']==='pending'): ?>
                    <span class="tx-status-badge pending">در انتظار تأیید</span>
                    <?php elseif ($tx['status']==='failed'): ?>
                    <span class="tx-status-badge failed">ناموفق</span>
                    <?php endif; ?>
                </div>
            </div>
            <?php endforeach; ?>
        </div>
        <?php if ($totalPages>1): ?>
        <div class="pagination" style="margin-top:16px;">
            <?php for($i=1;$i<=$totalPages;$i++): ?>
            <a href="?page=<?=$i?>" class="page-link <?=$i==$page?'active':''?>"><?=$i?></a>
            <?php endfor; ?>
        </div>
        <?php endif; ?>
        <?php else: ?>
        <div class="empty-state">
            <i class="fas fa-history" style="font-size:48px;opacity:0.2;display:block;margin-bottom:12px;"></i>
            <p>هنوز تراکنشی ثبت نشده.</p>
        </div>
        <?php endif; ?>
    </div>
</section>

<style>
.wallet-page{padding:30px 5%;min-height:80vh;max-width:860px;margin:0 auto;}
.wallet-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;}
.wallet-header h1{margin:0;display:flex;align-items:center;gap:10px;font-size:1.6rem;}
.back-btn{color:var(--primary);text-decoration:none;font-weight:500;display:inline-flex;align-items:center;gap:6px;}
.balance-card{background:linear-gradient(135deg,#8b5cf6,#4f46e5);border-radius:20px;padding:28px;color:#fff;position:relative;overflow:hidden;margin-bottom:20px;}
.balance-bg{position:absolute;top:-40px;left:-40px;width:200px;height:200px;background:rgba(255,255,255,0.08);border-radius:50%;}
.balance-content{position:relative;z-index:1;}
.balance-label{font-size:13px;opacity:0.85;margin-bottom:10px;display:flex;align-items:center;gap:8px;}
.balance-amount{font-size:34px;font-weight:800;margin-bottom:6px;}
.balance-amount span{font-size:15px;font-weight:400;opacity:0.8;}
.balance-note{font-size:12px;opacity:0.7;}
.charge-tabs{display:flex;gap:10px;margin-bottom:16px;}
.tab-btn{flex:1;padding:12px;border-radius:12px;border:1px solid var(--glass-border);background:var(--glass-bg);color:var(--text-secondary);font-family:inherit;font-size:14px;font-weight:600;cursor:pointer;transition:all 0.2s;display:flex;align-items:center;justify-content:center;gap:8px;}
.tab-btn.active{background:rgba(139,92,246,0.12);border-color:rgba(139,92,246,0.4);color:var(--primary);}
.charge-card{background:var(--glass-bg-light);border:1px solid var(--glass-border);border-radius:16px;padding:22px;margin-bottom:20px;}
.charge-card h3{margin:0 0 18px;font-size:16px;display:flex;align-items:center;gap:8px;}
.quick-amounts{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap;}
.quick-btn{padding:8px 14px;border:1px solid var(--glass-border);border-radius:8px;background:transparent;cursor:pointer;font-family:inherit;font-size:13px;font-weight:600;transition:0.2s;color:var(--text-primary);}
.quick-btn:hover{border-color:var(--primary);color:var(--primary);}
.amount-input-wrap{position:relative;}
.amount-input{width:100%;padding:12px 14px;padding-left:60px;border:1px solid var(--glass-border);border-radius:10px;font-family:inherit;font-size:15px;box-sizing:border-box;transition:0.2s;background:var(--glass-bg);color:var(--text-primary);}
.amount-input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-glow);background:var(--glass-bg-light);}
.amount-suffix{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-secondary);font-size:13px;}
.amount-hint{display:block;font-size:12px;color:var(--text-secondary);margin:6px 0 14px;}
.card-info-box{background:linear-gradient(135deg,#1e3a5f,#2d5a8e);border-radius:14px;padding:18px;color:#fff;}
.card-info-header{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600;margin-bottom:14px;border-bottom:1px solid rgba(255,255,255,0.2);padding-bottom:10px;}
.card-details{display:flex;flex-direction:column;gap:10px;}
.card-detail-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.card-label{font-size:0.82rem;opacity:0.8;min-width:80px;}
.card-value{font-weight:600;}
.card-number-display{letter-spacing:3px;font-family:monospace;font-size:1.05rem;background:rgba(255,255,255,0.15);padding:4px 10px;border-radius:6px;}
.copy-btn{background:rgba(255,255,255,0.2);border:1px solid rgba(255,255,255,0.3);color:#fff;padding:4px 10px;border-radius:6px;cursor:pointer;font-family:inherit;font-size:0.8rem;transition:0.2s;}
.copy-btn:hover{background:rgba(255,255,255,0.35);}
.tx-section{background:var(--glass-bg-light);border:1px solid var(--glass-border);border-radius:16px;padding:22px;}
.tx-section h3{margin:0 0 18px;font-size:16px;display:flex;align-items:center;gap:8px;}
.tx-list{display:flex;flex-direction:column;gap:2px;}
.tx-item{display:flex;align-items:center;gap:14px;padding:14px;border-radius:12px;transition:0.2s;}
.tx-item:hover{background:rgba(255,255,255,0.04);}
.tx-failed{opacity:0.6;}
.tx-icon{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:16px;}
.tx-info{flex:1;}
.tx-label{font-weight:600;font-size:14px;}
.tx-desc{font-size:12px;color:var(--text-secondary);margin-top:2px;}
.tx-date{font-size:12px;color:var(--text-secondary);margin-top:4px;}
.tx-amount-col{text-align:left;flex-shrink:0;}
.tx-amount{font-weight:700;font-size:15px;}
.tx-credit{color:#8b5cf6;} .tx-debit{color:#FF3B30;}
.tx-balance{font-size:11px;color:var(--text-secondary);margin-top:2px;}
.tx-status-badge{font-size:11px;padding:2px 8px;border-radius:20px;display:inline-block;margin-top:4px;}
.tx-status-badge.pending{background:#fff3cd;color:#856404;}
.tx-status-badge.failed{background:#f8d7da;color:#721c24;}
.empty-state{text-align:center;padding:40px;color:var(--text-secondary);}
.page-link{min-width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:8px;text-decoration:none;color:var(--text-primary);transition:0.2s;margin:2px;}
.page-link.active{background:var(--primary);color:#fff;border-color:var(--primary);}
@media(max-width:600px){.wallet-page{padding:20px 4%;}.balance-amount{font-size:26px;}.charge-tabs{flex-direction:column;}}
</style>

<script>
function switchTab(tab, btn) {
    document.querySelectorAll('.charge-panel').forEach(p => p.style.display = 'none');
    document.querySelectorAll('.tab-btn').forEach(b => b.classList.remove('active'));
    document.getElementById('tab-' + tab).style.display = 'block';
    btn.classList.add('active');
}
function setAmount(inputId, val) {
    const inp = document.getElementById(inputId);
    if (inp) inp.value = val.toLocaleString('fa');
    document.querySelectorAll('.quick-btn').forEach(b => b.style.borderColor = '');
    event.target.style.borderColor = 'var(--primary)';
}
function copyText(elId, btn) {
    const text = document.getElementById(elId).textContent.replace(/\s/g,'');
    navigator.clipboard.writeText(text).then(() => {
        btn.innerHTML = '<i class="fas fa-check"></i> کپی شد';
        setTimeout(() => btn.innerHTML = '<i class="fas fa-copy"></i> کپی', 2000);
    });
}
['onlineAmount','cardAmount'].forEach(id => {
    document.getElementById(id)?.addEventListener('input', function() {
        let v = this.value.replace(/[^0-9]/g,'');
        this.value = v ? parseInt(v).toLocaleString('fa') : '';
    });
});
document.getElementById('onlineForm')?.addEventListener('submit', function() {
    const raw = document.getElementById('onlineAmount').value.replace(/[^0-9]/g,'');
    document.getElementById('onlineAmount').value = raw;
});
document.getElementById('cardForm')?.addEventListener('submit', function() {
    const raw = document.getElementById('cardAmount').value.replace(/[^0-9]/g,'');
    document.getElementById('cardAmount').value = raw;
});
</script>

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