/** * Banking Interface * Handles transfers, deposits, withdrawals, and account management */ // Mock data const mockData = { accounts: { cash: { name: "Cash", balance: 2500, type: "Physical Currency" }, bank: { name: "Bank Account", balance: 45750, type: "Savings • Protected" }, org: { name: "Organization", balance: 125000, type: "Shared • View Only", readOnly: true } }, transactions: [ { type: "deposit", amount: 5000, desc: "From Cash", time: "2 hours ago" }, { type: "withdrawal", amount: -1200, desc: "To Cash", time: "5 hours ago" }, { type: "transfer", amount: -500, desc: "To Player #1234", time: "1 day ago" }, { type: "deposit", amount: 10000, desc: "Mission Reward", time: "2 days ago" }, { type: "transfer", amount: 2000, desc: "From Player #5678", time: "3 days ago" } ] }; // State let selectedAccount = 'cash'; // Initialize function initBank() { console.log('Banking interface initializing...'); setupEventHandlers(); updateBalances(); console.log('Banking interface initialized'); } // Event Handlers function setupEventHandlers() { // Close button const closeBtn = document.querySelector('.close-btn'); if (closeBtn) { closeBtn.addEventListener('click', () => { console.log('Closing bank...'); sendEvent('bank::close', {}); }); } // Account card selection const accountCards = document.querySelectorAll('.account-card'); accountCards.forEach(card => { card.addEventListener('click', () => { accountCards.forEach(c => c.classList.remove('active')); card.classList.add('active'); selectedAccount = card.dataset.account; console.log('Selected account:', selectedAccount); }); }); // Transfer form const transferBtn = document.getElementById('transferBtn'); const transferFrom = document.getElementById('transferFrom'); const transferTo = document.getElementById('transferTo'); const transferAmount = document.getElementById('transferAmount'); const playerId = document.getElementById('playerId'); const playerIdGroup = document.getElementById('playerIdGroup'); // Show/hide player ID field if (transferTo) { transferTo.addEventListener('change', () => { if (transferTo.value === 'player') { playerIdGroup.style.display = 'flex'; } else { playerIdGroup.style.display = 'none'; } }); } // Transfer button if (transferBtn) { transferBtn.addEventListener('click', () => { const from = transferFrom.value; const to = transferTo.value; const amount = parseFloat(transferAmount.value); if (!amount || amount <= 0) { alert('Please enter a valid amount'); return; } if (from === to) { alert('Source and destination must be different'); return; } const fromAccount = mockData.accounts[from]; if (amount > fromAccount.balance) { alert('Insufficient funds'); return; } if (to === 'player' && !playerId.value) { alert('Please enter a player ID'); return; } const transferData = { from: from, to: to, amount: amount, playerId: to === 'player' ? playerId.value : null }; console.log('Transfer request:', transferData); sendEvent('bank::transfer', transferData); // Clear form transferAmount.value = ''; if (to === 'player') playerId.value = ''; }); } // Quick action buttons const quickActionBtns = document.querySelectorAll('.quick-action-btn'); quickActionBtns.forEach(btn => { btn.addEventListener('click', () => { const action = btn.dataset.action; console.log('Quick action:', action); switch (action) { case 'deposit': const cashBalance = mockData.accounts.cash.balance; if (cashBalance <= 0) { alert('No cash to deposit'); return; } sendEvent('bank::deposit', { amount: cashBalance }); break; case 'withdraw': const amount = prompt('Enter amount to withdraw:'); if (amount && parseFloat(amount) > 0) { sendEvent('bank::withdraw', { amount: parseFloat(amount) }); } break; case 'statement': sendEvent('bank::statement', {}); break; } }); }); // Transaction items const transactionItems = document.querySelectorAll('.transaction-item'); transactionItems.forEach((item, index) => { item.addEventListener('click', () => { console.log('Transaction clicked:', mockData.transactions[index]); sendEvent('bank::transaction::view', { transaction: mockData.transactions[index] }); }); }); } // Update balances function updateBalances() { const balanceElements = document.querySelectorAll('.balance-amount'); balanceElements[0].textContent = `$${mockData.accounts.cash.balance.toLocaleString()}`; balanceElements[1].textContent = `$${mockData.accounts.bank.balance.toLocaleString()}`; balanceElements[2].textContent = `$${mockData.accounts.org.balance.toLocaleString()}`; // Update form options const transferFrom = document.getElementById('transferFrom'); const transferTo = document.getElementById('transferTo'); if (transferFrom) { transferFrom.innerHTML = ` `; } } // Update bank data function updateBankData(data) { if (data.accounts) { Object.assign(mockData.accounts, data.accounts); updateBalances(); } if (data.transactions) { // Update transaction list mockData.transactions = data.transactions; // Re-render transaction list renderTransactions(); } } // Render transactions function renderTransactions() { const transactionList = document.querySelector('.transaction-list'); if (!transactionList) return; transactionList.innerHTML = ''; mockData.transactions.forEach((transaction, index) => { const item = document.createElement('div'); item.className = 'transaction-item'; const isPositive = transaction.amount > 0; const amountClass = isPositive ? 'positive' : 'negative'; const displayAmount = isPositive ? `+$${transaction.amount.toLocaleString()}` : `-$${Math.abs(transaction.amount).toLocaleString()}`; item.innerHTML = `
${transaction.type} ${displayAmount}
${transaction.desc} ${transaction.time}
`; item.addEventListener('click', () => { console.log('Transaction clicked:', transaction); sendEvent('bank::transaction::view', { transaction: transaction }); }); transactionList.appendChild(item); }); } // Send event to Arma function sendEvent(event, data) { if (typeof A3API !== 'undefined') { A3API.SendAlert(JSON.stringify({ event: event, data: data })); } else { console.log('Event:', event, 'Data:', data); } } // Auto-initialize if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initBank); } else { initBank(); } // Expose functions globally window.updateBankData = updateBankData;