// Pattern Solver class PatternSolver { static async solve(pattern) { try { const results = await PuzzleDatabase.getWordSuggestions(pattern); return results.map(item => ({ word: item.word, clue: item.clue, confidence: this.calculateConfidence(pattern, item.word) })); } catch (error) { console.error('Pattern solving error:', error); return []; } } static calculateConfidence(pattern, word) { let matches = 0; let total = pattern.length; for (let i = 0; i < pattern.length; i++) { if (pattern[i] !== '_' && pattern[i] === word[i]) { matches++; } } return Math.round((matches / total) * 100); } } // Anagram Solver class AnagramSolver { static async solve(letters) { try { const results = await PuzzleDatabase.getAnagramSolutions(letters); return results.map(item => ({ word: item.word, clue: item.clue })); } catch (error) { console.error('Anagram solving error:', error); return []; } } } // Word Helper UI Controller class WordHelperUI { constructor() { this.initializeEventListeners(); } initializeEventListeners() { // Pattern solver const patternBtn = document.getElementById('patternSolveBtn'); const patternInput = document.getElementById('patternInput'); patternBtn.addEventListener('click', async () => { await this.handlePatternSolve(); }); patternInput.addEventListener('keypress', async (e) => { if (e.key === 'Enter') { await this.handlePatternSolve(); } }); // Anagram solver const anagramBtn = document.getElementById('anagramSolveBtn'); const anagramInput = document.getElementById('anagramInput'); anagramBtn.addEventListener('click', async () => { await this.handleAnagramSolve(); }); anagramInput.addEventListener('keypress', async (e) => { if (e.key === 'Enter') { await this.handleAnagramSolve(); } }); } async handlePatternSolve() { const input = document.getElementById('patternInput').value.trim().toUpperCase(); const resultsDiv = document.getElementById('patternResults'); if (!input || !input.includes('_')) { this.showError(resultsDiv, 'Voer een patroon in met onderstrepingstekens (_) voor onbekende letters.'); return; } this.showLoading(resultsDiv); try { const solutions = await PatternSolver.solve(input); this.displayPatternResults(resultsDiv, solutions); } catch (error) { this.showError(resultsDiv, 'Er is een fout opgetreden bij het zoeken.'); } } async handleAnagramSolve() { const input = document.getElementById('anagramInput').value.trim().toUpperCase(); const resultsDiv = document.getElementById('anagramResults'); if (!input || input.length < 3) { this.showError(resultsDiv, 'Voer minstens 3 letters in voor anagram zoeken.'); return; } this.showLoading(resultsDiv); try { const solutions = await AnagramSolver.solve(input); this.displayAnagramResults(resultsDiv, solutions); } catch (error) { this.showError(resultsDiv, 'Er is een fout opgetreden bij het ontcijferen.'); } } showLoading(container) { container.innerHTML = '
Zoeken...'; } showError(container, message) { container.innerHTML = `
${message}
`; } displayPatternResults(container, results) { if (results.length === 0) { container.innerHTML = '
Geen woorden gevonden.
'; return; } const html = results.map(result => `
${result.word} - ${result.clue} ${result.confidence}%
`).join(''); container.innerHTML = html; } displayAnagramResults(container, results) { if (results.length === 0) { container.innerHTML = '
Geen anagrammen gevonden.
'; return; } const html = results.map(result => `
${result.word} - ${result.clue}
`).join(''); container.innerHTML = html; } insertWord(word) { // This method can be enhanced to insert the word into the current active cell const activeCell = document.querySelector('.grid-cell.active input'); if (activeCell) { activeCell.value = word[0]; // Move to next cells automatically let currentInput = activeCell; for (let i = 1; i < word.length; i++) { const nextCell = currentCell.parentElement.nextElementSibling?.querySelector('input'); if (nextCell) { nextCell.value = word[i]; currentInput = nextCell; } } } } } // Initialize word helper const wordHelperUI = new WordHelperUI();