`);
}
// === Credits balance display (if has some but not enough) ===
if (this.config.creditsModeEnabled && this.userCredits > 0 && !hasCredits) {
$container.prepend(`
⚠️ You have ${this.userCredits} credits (need ${this.config.creditsPerGame || 1} to play)
`);
}
// === FREE mode (only if payments disabled) ===
if (!this.config.paymentsEnabled) {
$container.append(`
`);
}
},
handleModeSelection: function(mode, action, packageId) {
console.log("Mode selected:", mode, "Action:", action, "Package:", packageId);
if (mode === 'FREE') {
$('#payment-ui').hide();
if (window.socket) {
window.socket.emit('enter_game');
}
return;
}
// If using existing credits, just start the game
if (action === 'use_credit' && this.userCredits >= 1) {
$('#payment-ui').hide();
if (window.socket) {
window.socket.emit('enter_game');
}
return;
}
// Request payment with type and optional packageId
let paymentType = 'single_game';
if (action === 'buy_credits') {
paymentType = 'credits_package';
}
const requestData = { type: paymentType };
if (packageId) {
requestData.packageId = packageId;
}
if (window.socket) {
window.socket.emit('request_payment', requestData);
// Show loading state
$('.game-modes').hide();
$('#payment-details').show();
$('#payment-status').text('Requesting payment address...');
$('#payment-amount').text('...');
$('#payment-address').val('Loading...');
}
},
showPaymentRequest: function(data) {
$('#payment-ui').show();
$('#payment-details').show();
$('.game-modes').hide();
const isCreditsPurchase = data.paymentType === 'credits_package';
let headerText = '💳 Payment Required';
if (isCreditsPurchase && data.package) {
const bonus = data.package.bonus > 0 ? ` +${data.package.bonus} bonus` : '';
headerText = `🎫 Buy ${data.package.credits}${bonus} Credits`;
}
$('.payment-header strong').text(headerText);
const displayAmount = data.humanAmount || data.amountFormatted || data.amount;
$('#payment-amount').text(displayAmount + ' ' + (data.currency || ''));
$('#payment-address').val(data.address);
$('#check-payment').data('payment-id', data.paymentId || data.id);
if (data.reused) {
$('#payment-status').html('♻️ Using existing pending payment');
} else {
const statusText = isCreditsPurchase
? 'Send payment to receive credits...'
: 'Waiting for payment...';
$('#payment-status').text(statusText);
}
},
show: function() {
this.render(); // Ensure options are up-to-date with current config
$('#payment-ui').show();
$('.game-modes').show();
$('#payment-details').hide();
$('.payment-header strong').text('🎮 Choose How to Play');
}
};
// Expose globally
window.PaymentUI = PaymentUI;
// Initialize when DOM is ready
$(document).ready(function() {
PaymentUI.init();
});