// ==============================================
// WebSpeech.jslib - Text-to-Speech fuer WebGL
// ==============================================
// Kopiere diese Datei nach Assets/Plugins/WebGL/
// um TTS im Browser zu aktivieren.

mergeInto(LibraryManager.library, {

    // Spricht den Text sofort
    SpeakWebGL: function(textPtr) {
        var text = UTF8ToString(textPtr);

        if ('speechSynthesis' in window) {
            // Vorherige Sprache stoppen
            window.speechSynthesis.cancel();

            var utterance = new SpeechSynthesisUtterance(text);
            utterance.lang = 'de-DE';
            utterance.rate = 0.9;
            utterance.pitch = 1.0;
            utterance.volume = 1.0;

            // Deutsche Stimme suchen
            var voices = window.speechSynthesis.getVoices();
            var germanVoice = voices.find(function(voice) {
                return voice.lang.startsWith('de');
            });
            if (germanVoice) {
                utterance.voice = germanVoice;
            }

            window.speechSynthesis.speak(utterance);
        } else {
            console.warn('Text-to-Speech wird von diesem Browser nicht unterstuetzt.');
        }
    },

    // Spricht den Text nach einer Verzoegerung
    SpeakDelayedWebGL: function(textPtr, delaySeconds) {
        var text = UTF8ToString(textPtr);

        setTimeout(function() {
            if ('speechSynthesis' in window) {
                var utterance = new SpeechSynthesisUtterance(text);
                utterance.lang = 'de-DE';
                utterance.rate = 0.9;
                utterance.pitch = 1.0;
                utterance.volume = 1.0;

                var voices = window.speechSynthesis.getVoices();
                var germanVoice = voices.find(function(voice) {
                    return voice.lang.startsWith('de');
                });
                if (germanVoice) {
                    utterance.voice = germanVoice;
                }

                window.speechSynthesis.speak(utterance);
            }
        }, delaySeconds * 1000);
    },

    // Stoppt alle laufenden Sprach-Ausgaben
    StopSpeakingWebGL: function() {
        if ('speechSynthesis' in window) {
            window.speechSynthesis.cancel();
        }
    },

    // Prueft ob TTS verfuegbar ist
    IsTTSAvailableWebGL: function() {
        return 'speechSynthesis' in window;
    },

    // Gibt verfuegbare Stimmen zurueck (als JSON)
    GetAvailableVoicesWebGL: function() {
        if ('speechSynthesis' in window) {
            var voices = window.speechSynthesis.getVoices();
            var germanVoices = voices.filter(function(voice) {
                return voice.lang.startsWith('de');
            }).map(function(voice) {
                return {
                    name: voice.name,
                    lang: voice.lang,
                    local: voice.localService
                };
            });

            var json = JSON.stringify(germanVoices);
            var bufferSize = lengthBytesUTF8(json) + 1;
            var buffer = _malloc(bufferSize);
            stringToUTF8(json, buffer, bufferSize);
            return buffer;
        }
        return null;
    }

});
