/**
 * Galaxy Strike Online - Game Data
 * UI constants and configuration only.
 * All game content (items, skills, recipes, dungeons, enemies) is loaded from the server.
 */

// Game configuration
const GAME_CONFIG = {
    version: '1.0.0',
    name: 'Galaxy Strike Online',
    maxLevel: 100,
    saveInterval: 30000, // 30 seconds
    notificationDuration: 3000,
    maxNotifications: 5
};

// Player defaults (used only for initial UI state before server data arrives)
const PLAYER_DEFAULTS = {
    level: 1,
    experience: 0,
    skillPoints: 0,
    credits: 1000,
    gems: 10,
    health: 100,
    maxHealth: 100,
    energy: 100,
    maxEnergy: 100,
    attack: 10,
    defense: 5,
    speed: 10,
    criticalChance: 0.05,
    criticalDamage: 1.5
};

// Experience requirements (client-side display only; server is authoritative)
const EXPERIENCE_TABLE = [];
for (let i = 1; i <= 100; i++) {
    EXPERIENCE_TABLE[i] = Math.floor(100 * Math.pow(1.5, i - 1));
}

// Item rarity display properties (colours/labels only - drop rates are server-side)
const ITEM_RARITIES = {
    common:    { name: 'Common',    color: '#888888', multiplier: 1.0 },
    uncommon:  { name: 'Uncommon',  color: '#00ff00', multiplier: 1.2 },
    rare:      { name: 'Rare',      color: '#0088ff', multiplier: 1.5 },
    epic:      { name: 'Epic',      color: '#8833ff', multiplier: 2.0 },
    legendary: { name: 'Legendary', color: '#ff8800', multiplier: 3.0 }
};

// Game messages and notifications
const GAME_MESSAGES = {
    welcome:              'Welcome to Galaxy Strike Online, Commander!',
    levelUp:              'Level Up! You are now level {level}!',
    questCompleted:       'Quest completed: {questName}!',
    dungeonCompleted:     'Dungeon completed! Time: {time}',
    achievementUnlocked:  'Achievement Unlocked: {achievementName}!',
    insufficientCredits:  'Not enough credits!',
    insufficientGems:     'Not enough gems!',
    insufficientEnergy:   'Not enough energy!',
    inventoryFull:        'Inventory is full!',
    skillPointsAvailable: 'You have {points} skill points available!',
    dailyReward:          'Daily reward claimed! Day {day}',
    offlineRewards:       'Welcome back! You were offline for {time}'
};

// Utility functions
const GameUtils = {
    getRandomItem(array) {
        return array[Math.floor(Math.random() * array.length)];
    },

    getRandomInt(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    },

    getRandomFloat(min, max) {
        return Math.random() * (max - min) + min;
    },

    checkChance(chance) {
        return Math.random() < chance;
    },

    formatNumber(num) {
        if (num >= 1000000) return (num / 1000000).toFixed(1) + 'M';
        if (num >= 1000)    return (num / 1000).toFixed(1) + 'K';
        return Math.floor(num).toString();
    },

    formatTime(milliseconds) {
        const seconds = Math.floor(milliseconds / 1000);
        const minutes = Math.floor(seconds / 60);
        const hours   = Math.floor(minutes / 60);
        const days    = Math.floor(hours / 24);

        if (days > 0)    return `${days}d ${hours % 24}h`;
        if (hours > 0)   return `${hours}h ${minutes % 60}m`;
        if (minutes > 0) return `${minutes}m ${seconds % 60}s`;
        return `${seconds}s`;
    },

    getExperienceForLevel(level) {
        return EXPERIENCE_TABLE[level] || 0;
    },

    deepClone(obj) {
        return JSON.parse(JSON.stringify(obj));
    },

    generateId() {
        return Date.now().toString() + Math.random().toString(36).substr(2, 9);
    }
};

// Export for use in other modules
if (typeof module !== 'undefined' && module.exports) {
    module.exports = {
        GAME_CONFIG,
        PLAYER_DEFAULTS,
        EXPERIENCE_TABLE,
        ITEM_RARITIES,
        GAME_MESSAGES,
        GameUtils
    };
}
