// Puzzle UI system — level selection, puzzle mode, verification
import { state } from './state.js';
import { LEVELS, getLevel, isLevelUnlocked, isLevelCompleted, verifyLevel, completeLevel } from './levels.js';
import { evaluateAll } from './gates.js';
export let puzzleMode = false;
export let currentLevel = null;
/**
* Initialize puzzle UI
*/
export function initPuzzleUI() {
createLevelSelectionPanel();
createPuzzlePanel();
initModeToggle();
}
/**
* Create level selection panel
*/
function createLevelSelectionPanel() {
const panel = document.createElement('div');
panel.id = 'level-panel';
panel.className = 'puzzle-panel';
panel.innerHTML = `
${completed ? '✓ COMPLETED' : unlocked ? 'READY' : '🔒 LOCKED'}
`;
if (unlocked) {
card.addEventListener('click', () => selectLevel(level.id));
}
categoryEl.appendChild(card);
});
container.appendChild(categoryEl);
});
}
/**
* Create puzzle info panel (shown when level is selected)
*/
function createPuzzlePanel() {
const panel = document.createElement('div');
panel.id = 'puzzle-panel';
panel.className = 'puzzle-panel puzzle-info';
panel.innerHTML = `
`;
document.body.appendChild(panel);
document.getElementById('close-puzzle').addEventListener('click', () => {
exitPuzzleMode();
});
document.getElementById('verify-btn').addEventListener('click', () => {
verifySolution();
});
document.getElementById('hint-btn').addEventListener('click', () => {
showHint();
});
document.getElementById('reset-puzzle-btn').addEventListener('click', () => {
resetPuzzle();
});
}
/**
* Initialize mode toggle in toolbar
*/
function initModeToggle() {
const toolbar = document.getElementById('toolbar');
const separator = document.createElement('div');
separator.className = 'separator';
const modeToggle = document.createElement('div');
modeToggle.id = 'mode-toggle';
modeToggle.className = 'mode-toggle';
modeToggle.innerHTML = `
';
failedTests.forEach(test => {
resultEl.innerHTML += `
Input: ${JSON.stringify(test.inputs)} →
Expected: ${JSON.stringify(test.expectedOutputs)},
Got: ${JSON.stringify(test.actualOutputs)}
`;
});
resultEl.innerHTML += '
';
}
}
}
/**
* Show hint
*/
function showHint() {
if (!currentLevel || !currentLevel.hints) return;
const hints = currentLevel.hints;
let hintIndex = parseInt(sessionStorage.getItem(`hint_${currentLevel.id}`) || '0');
if (hintIndex >= hints.length) {
alert('No more hints available!');
return;
}
const hint = hints[hintIndex];
alert(`Hint: ${hint}`);
sessionStorage.setItem(`hint_${currentLevel.id}`, String(hintIndex + 1));
}
/**
* Reset puzzle
*/
function resetPuzzle() {
if (!currentLevel) return;
clearCircuitForPuzzle(currentLevel);
document.getElementById('verification-result').innerHTML = '';
}
/**
* Exit puzzle mode
*/
export function exitPuzzleMode() {
setSandboxMode();
}
/**
* Show level panel
*/
export function showLevelPanel() {
document.getElementById('level-panel').classList.add('visible');
}