import { getSavedLevels } from "./levelEditor";
import { LevelConfig } from "./levelConfig";
import debugLog from './debug';
const SELECTED_LEVEL_KEY = 'space-game-selected-level';
/**
* Populate the level selection screen with saved levels
*/
export function populateLevelSelector(): boolean {
const container = document.getElementById('levelCardsContainer');
if (!container) {
console.warn('Level cards container not found');
return false;
}
const savedLevels = getSavedLevels();
if (savedLevels.size === 0) {
container.innerHTML = `
`;
return false;
}
// Create level cards
let html = '';
for (const [name, config] of savedLevels.entries()) {
const timestamp = config.timestamp ? new Date(config.timestamp).toLocaleDateString() : '';
const description = config.metadata?.description || `${config.asteroids.length} asteroids • ${config.planets.length} planets`;
html += `
${name}
Difficulty: ${config.difficulty}
${description}
${timestamp ? `
${timestamp}
` : ''}
`;
}
container.innerHTML = html;
// Add event listeners to level buttons
container.querySelectorAll('.level-button').forEach(button => {
button.addEventListener('click', (e) => {
const levelName = (e.target as HTMLButtonElement).dataset.level;
if (levelName) {
selectLevel(levelName);
}
});
});
return true;
}
/**
* Initialize level button listeners (for any dynamically created buttons)
*/
export function initializeLevelButtons(): void {
document.querySelectorAll('.level-button').forEach(button => {
if (!button.hasAttribute('data-listener-attached')) {
button.setAttribute('data-listener-attached', 'true');
button.addEventListener('click', (e) => {
const levelName = (e.target as HTMLButtonElement).dataset.level;
if (levelName) {
selectLevel(levelName);
}
});
}
});
}
/**
* Select a level and store it for Level1 to use
*/
export function selectLevel(levelName: string): void {
const savedLevels = getSavedLevels();
const config = savedLevels.get(levelName);
if (!config) {
console.error(`Level "${levelName}" not found`);
alert(`Level "${levelName}" not found!`);
return;
}
// Store selected level name
sessionStorage.setItem(SELECTED_LEVEL_KEY, levelName);
debugLog(`Selected level: ${levelName}`);
// Trigger level start (the existing code will pick this up)
const event = new CustomEvent('levelSelected', { detail: { levelName, config } });
window.dispatchEvent(event);
}
/**
* Get the currently selected level configuration
*/
export function getSelectedLevel(): { name: string, config: LevelConfig } | null {
const levelName = sessionStorage.getItem(SELECTED_LEVEL_KEY);
if (!levelName) return null;
const savedLevels = getSavedLevels();
const config = savedLevels.get(levelName);
if (!config) return null;
return { name: levelName, config };
}
/**
* Clear the selected level
*/
export function clearSelectedLevel(): void {
sessionStorage.removeItem(SELECTED_LEVEL_KEY);
}
/**
* Check if there are any saved levels
*/
export function hasSavedLevels(): boolean {
const savedLevels = getSavedLevels();
return savedLevels.size > 0;
}