220 lines
5.9 KiB
JavaScript
220 lines
5.9 KiB
JavaScript
/**
|
|
* VIP MANAGER - EARLY SUPPORTER SYSTEM
|
|
* Handles first 20 buyers exclusive Gronk access
|
|
*/
|
|
|
|
class VIPManager {
|
|
constructor() {
|
|
this.vipStatus = null;
|
|
this.purchaseOrder = null;
|
|
this.isEarlySupporter = false;
|
|
this.init();
|
|
}
|
|
|
|
init() {
|
|
// Check VIP status from localStorage
|
|
const stored = localStorage.getItem('vip_status');
|
|
if (stored) {
|
|
this.vipStatus = JSON.parse(stored);
|
|
this.isEarlySupporter = this.vipStatus.early_supporter || false;
|
|
this.purchaseOrder = this.vipStatus.order_number || null;
|
|
}
|
|
|
|
console.log('🏆 VIP Manager initialized');
|
|
console.log(' Early Supporter:', this.isEarlySupporter);
|
|
console.log(' Purchase Order:', this.purchaseOrder);
|
|
}
|
|
|
|
/**
|
|
* CHECK EARLY SUPPORTER STATUS
|
|
* Called on first game launch
|
|
*/
|
|
async checkEarlySupporter() {
|
|
// TODO: Integrate with actual purchase API
|
|
// For now, check manual override or demo mode
|
|
|
|
const manualVIP = localStorage.getItem('manual_vip');
|
|
if (manualVIP === 'true') {
|
|
this.grantEarlySupporter(1); // Manual override
|
|
return true;
|
|
}
|
|
|
|
// Check Steam API (when available)
|
|
try {
|
|
const orderNumber = await this.getSteamPurchaseOrder();
|
|
if (orderNumber && orderNumber <= 20) {
|
|
this.grantEarlySupporter(orderNumber);
|
|
return true;
|
|
}
|
|
} catch (e) {
|
|
console.warn('Steam API not available:', e);
|
|
}
|
|
|
|
// Check Itch.io (when available)
|
|
try {
|
|
const orderNumber = await this.getItchPurchaseOrder();
|
|
if (orderNumber && orderNumber <= 20) {
|
|
this.grantEarlySupporter(orderNumber);
|
|
return true;
|
|
}
|
|
} catch (e) {
|
|
console.warn('Itch.io API not available:', e);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* GRANT EARLY SUPPORTER STATUS
|
|
*/
|
|
grantEarlySupporter(orderNumber) {
|
|
this.isEarlySupporter = true;
|
|
this.purchaseOrder = orderNumber;
|
|
|
|
this.vipStatus = {
|
|
early_supporter: true,
|
|
order_number: orderNumber,
|
|
granted_date: new Date().toISOString(),
|
|
founder_badge: true,
|
|
gronk_unlocked: true
|
|
};
|
|
|
|
localStorage.setItem('vip_status', JSON.stringify(this.vipStatus));
|
|
|
|
console.log('🏆 EARLY SUPPORTER GRANTED!');
|
|
console.log(' Order #' + orderNumber);
|
|
|
|
// Trigger celebration effect
|
|
this.showFounderNotification();
|
|
}
|
|
|
|
/**
|
|
* SHOW FOUNDER NOTIFICATION
|
|
*/
|
|
showFounderNotification() {
|
|
// Will be implemented in UI
|
|
const event = new CustomEvent('vip-granted', {
|
|
detail: {
|
|
orderNumber: this.purchaseOrder,
|
|
title: 'FOUNDER STATUS UNLOCKED!',
|
|
message: 'You are supporter #' + this.purchaseOrder + ' worldwide!',
|
|
rewards: [
|
|
'Gronk companion unlocked immediately',
|
|
'Exclusive Gronk questline',
|
|
'Founder badge in-game',
|
|
'Your name in credits'
|
|
]
|
|
}
|
|
});
|
|
window.dispatchEvent(event);
|
|
}
|
|
|
|
/**
|
|
* CHECK IF GRONK SHOULD BE UNLOCKED
|
|
*/
|
|
isGronkUnlocked() {
|
|
return this.isEarlySupporter;
|
|
}
|
|
|
|
/**
|
|
* GET VIP BENEFITS
|
|
*/
|
|
getVIPBenefits() {
|
|
if (!this.isEarlySupporter) return null;
|
|
|
|
return {
|
|
gronk_companion: true,
|
|
gronk_vape_boost: true, // +20% speed
|
|
exclusive_quests: true,
|
|
founder_badge: true,
|
|
credits_listing: true,
|
|
vape_cloud_boost: true // Larger vape clouds for Gronk
|
|
};
|
|
}
|
|
|
|
/**
|
|
* STEAM API INTEGRATION (Placeholder)
|
|
*/
|
|
async getSteamPurchaseOrder() {
|
|
// TODO: Actual Steam API call
|
|
// This would check Steam purchase timestamp/order
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* ITCH.IO API INTEGRATION (Placeholder)
|
|
*/
|
|
async getItchPurchaseOrder() {
|
|
// TODO: Actual Itch.io API call
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* STREAMER ACCESS KEY SYSTEM
|
|
*/
|
|
validateStreamerKey(key) {
|
|
const validKeys = [
|
|
'STREAMER_PREVIEW_2026',
|
|
'CONTENT_CREATOR_EARLY'
|
|
];
|
|
|
|
if (validKeys.includes(key)) {
|
|
this.grantStreamerAccess();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
grantStreamerAccess() {
|
|
const streamerStatus = {
|
|
streamer_mode: true,
|
|
full_game_access: true,
|
|
granted_date: new Date().toISOString(),
|
|
watermark: true // Show "STREAMER PREVIEW" watermark
|
|
};
|
|
|
|
localStorage.setItem('streamer_status', JSON.stringify(streamerStatus));
|
|
|
|
console.log('📺 STREAMER ACCESS GRANTED');
|
|
}
|
|
|
|
isStreamerMode() {
|
|
const stored = localStorage.getItem('streamer_status');
|
|
if (!stored) return false;
|
|
|
|
const status = JSON.parse(stored);
|
|
return status.streamer_mode || false;
|
|
}
|
|
|
|
/**
|
|
* RESET VIP STATUS (for testing)
|
|
*/
|
|
resetVIPStatus() {
|
|
localStorage.removeItem('vip_status');
|
|
localStorage.removeItem('streamer_status');
|
|
localStorage.removeItem('manual_vip');
|
|
this.vipStatus = null;
|
|
this.isEarlySupporter = false;
|
|
this.purchaseOrder = null;
|
|
console.log('🔄 VIP status reset');
|
|
}
|
|
|
|
/**
|
|
* MANUAL VIP TOGGLE (Dev/Testing)
|
|
*/
|
|
setManualVIP(enabled) {
|
|
if (enabled) {
|
|
localStorage.setItem('manual_vip', 'true');
|
|
this.grantEarlySupporter(1);
|
|
} else {
|
|
localStorage.removeItem('manual_vip');
|
|
this.resetVIPStatus();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Singleton instance
|
|
const vipManager = new VIPManager();
|
|
export default vipManager;
|