//br-script.js
document.addEventListener("DOMContentLoaded", function(){
console.log("BOTSAUTO Voice & Strategy Engine frontend script loaded!");
var readBtn=document.getElementById("br-read-btn");
var languageSelect=document.getElementById("br-language-select");
var audioElement=document.getElementById("br-audio");
var customPromptTextarea=document.getElementById("br_custom_prompt");
var guidingThreadTextarea=document.getElementById("br_audio_guiding_thread");
var resetPromptBtn=document.getElementById("br-reset-prompt-btn");
var saveGuidingThreadBtn=document.getElementById("br-save-guiding-thread-btn");
var guidingThreadStatus=document.getElementById("br-guiding-thread-status");
var readerStatus=document.getElementById("br-reader-status");
function getChecklistToken(){
var urlParams=new URLSearchParams(window.location.search);
return urlParams.get("botsauto_edit")||"";
}
function getString(key, fallback){
if(br_ajax_obj&&br_ajax_obj.strings&&br_ajax_obj.strings[key]){
return br_ajax_obj.strings[key];
}
return fallback;
}
function setButtonLabel(button, text){
if(!button){
return;
}
var labelNode=button.querySelector(".blog-reader-button-label");
if(labelNode){
labelNode.textContent=text;
}else{
button.textContent=text;
}}
function setStatus(element, message, type){
if(!element){
return;
}
element.textContent=message||"";
element.classList.remove("is-info", "is-success", "is-warning", "is-error");
if(message&&type){
element.classList.add(type);
}}
function setReaderStatus(message, type){
setStatus(readerStatus, message, type);
}
function setGuidingThreadStatus(message, type){
setStatus(guidingThreadStatus, message, type);
}
function getErrorMessageFromResponse(data){
if(typeof data==="string"&&data){
return data;
}
if(data&&typeof data==="object"&&data.message){
return data.message;
}
return getString("unknownError", "Onbekende fout");
}
if(resetPromptBtn&&br_ajax_obj.is_admin&&br_ajax_obj.default_prompt){
resetPromptBtn.addEventListener("click", function(e){
e.preventDefault();
if(customPromptTextarea){
customPromptTextarea.value=br_ajax_obj.default_prompt;
}});
}
if(saveGuidingThreadBtn&&br_ajax_obj.is_admin&&guidingThreadTextarea){
saveGuidingThreadBtn.addEventListener("click", function(e){
e.preventDefault();
saveGuidingThreadBtn.disabled=true;
saveGuidingThreadBtn.textContent=getString("savingGuidingThread", "Opslaan...");
setGuidingThreadStatus("", "is-info");
var requestParams={
action: "br_save_audio_guiding_thread",
nonce: br_ajax_obj.nonce,
post_id: br_ajax_obj.post_id,
guiding_thread: guidingThreadTextarea.value||""
};
var checklistToken=getChecklistToken();
if(checklistToken){
requestParams.botsauto_edit=checklistToken;
}
fetch(br_ajax_obj.ajax_url, {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
},
body: new URLSearchParams(requestParams)
})
.then(function(response){
return response.json();
})
.then(function(data){
if(data&&data.success){
var successMessage=(data.data&&data.data.message) ? data.data.message:getString("guidingThreadSaved", "Rode draad opgeslagen.");
setGuidingThreadStatus(successMessage, "is-success");
}else{
var errorMessage=getString("guidingThreadSaveFailed", "Rode draad kon niet worden opgeslagen.");
if(data&&data.data&&data.data.message){
errorMessage=data.data.message;
}
setGuidingThreadStatus(errorMessage, "is-error");
}})
.catch(function(error){
console.error("Guiding thread save failed:", error);
setGuidingThreadStatus(
getString("guidingThreadSaveFailed", "Rode draad kon niet worden opgeslagen.") + " " + error.message,
"is-error"
);
})
.finally(function(){
saveGuidingThreadBtn.disabled=false;
saveGuidingThreadBtn.textContent=getString("saveGuidingThread", "Rode draad opslaan");
});
});
}
if(readBtn&&languageSelect&&audioElement){
readBtn.addEventListener("click", function(e){
e.preventDefault();
readBtn.disabled=true;
setButtonLabel(readBtn, getString("generating", "Audio wordt gegenereerd..."));
setReaderStatus(getString("generating", "Audio wordt gegenereerd..."), "is-info");
var selectedLanguage=languageSelect.value;
if(!selectedLanguage){
console.error("❌ No language selected");
readBtn.disabled=false;
setButtonLabel(readBtn, getString("listen", "Luister"));
setReaderStatus(getString("noLanguageSelected", "Kies eerst een taal."), "is-warning");
return;
}
console.log("🌍 Selected language:", selectedLanguage);
var botsautoToken=getChecklistToken();
var requestParams={
action: "br_generate_audio",
nonce: br_ajax_obj.nonce,
post_id: br_ajax_obj.post_id,
language: selectedLanguage
};
if(botsautoToken){
requestParams.botsauto_edit=botsautoToken;
}
if(br_ajax_obj.is_admin&&customPromptTextarea&&customPromptTextarea.value.trim()){
requestParams.custom_prompt=customPromptTextarea.value.trim();
console.log("📝 Using custom prompt from admin override");
}
if(br_ajax_obj.is_admin&&guidingThreadTextarea){
requestParams.custom_guiding_thread=guidingThreadTextarea.value||"";
}
fetch(br_ajax_obj.ajax_url, {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
},
body: new URLSearchParams(requestParams)
})
.then(response=> {
console.log("Raw response:", response);
return response.json();
})
.then(data=> {
console.log("🎤 Audio generation response:", data);
if(data.success){
console.log("Using cached file:", data.data.cached);
if(data.data&&Array.isArray(data.data.warnings)&&data.data.warnings.length){
setReaderStatus(data.data.warnings.join(" "), "is-warning");
}else{
setReaderStatus(getString("audioReady", "Audio staat klaar en wordt afgespeeld."), "is-success");
}
audioElement.src=data.data.audio_url;
audioElement.style.display="block";
var playPromise=audioElement.play();
if(playPromise&&typeof playPromise.catch==="function"){
playPromise.catch(function(playError){
console.warn("Audio playback did not start automatically:", playError);
setReaderStatus(getString("audioReady", "Audio staat klaar. Klik op afspelen om te luisteren."), "is-info");
});
}}else{
console.error("❌ Audio generation failed:", data.data);
var errorMessage=getErrorMessageFromResponse(data ? data.data:null);
if(data&&data.data&&data.data.code){
console.error("Audio generation error code:", data.data.code);
}
setReaderStatus(getString("errorPrefix", "Fout:") + " " + errorMessage, "is-error");
}})
.catch(error=> {
console.error("AJAX error:", error);
setReaderStatus(getString("errorPrefix", "Fout:") + " " + error.message, "is-error");
})
.finally(()=> {
readBtn.disabled=false;
setButtonLabel(readBtn, getString("listen", "Luister"));
});
});
}else{
console.error("❌ Missing elements on page (check br-read-btn, br-language-select, br-audio)");
}});