(function (){
if(!window.BDMChatPages) window.BDMChatPages={};
function toast(ctx, msg){
var prev=ctx.body.querySelector(".bdm-toast");
if(prev) prev.remove();
ctx.body.appendChild(ctx.el("div", { class: "bdm-toast", text: msg }));
setTimeout(function (){
var t=ctx.body.querySelector(".bdm-toast");
if(t) t.remove();
}, 2600);
}
function pickFirst(obj, keys){
if(!obj||typeof obj!=="object") return "";
for (var i=0; i < keys.length; i++){
var v=obj[keys[i]];
if(v!=null&&String(v).trim()!=="") return String(v).trim();
}
return "";
}
function deepPick(obj, path){
var parts=String(path||"").split(".");
var cur=obj;
for (var i=0; i < parts.length; i++){
if(!cur||typeof cur!=="object") return "";
cur=cur[parts[i]];
}
return cur==null ? "":String(cur).trim();
}
function formatCpfDisplay(digits){
var d=String(digits||"").replace(/\D/g, "");
if(d.length!==11) return String(digits||"").trim();
return d.slice(0, 3) + "." + d.slice(3, 6) + "." + d.slice(6, 9) + "-" + d.slice(9, 11);
}
function displayNome(u){
if(!u) return "Visitante";
if(u.nome&&String(u.nome).trim()) return String(u.nome).trim();
var p=u.payload&&typeof u.payload==="object" ? u.payload:null;
if(p){
var n=pickFirst(p, ["nome", "name"])||deepPick(p, "cliente.nome")||deepPick(p, "usuario.nome");
if(n) return n;
}
if(u.email){
var at=u.email.indexOf("@");
var local=at > 0 ? u.email.slice(0, at):u.email;
if(local) return local.charAt(0).toUpperCase() + local.slice(1);
}
return "Usuário";
}
function onlyDigits(v){
return String(v||"").replace(/\D/g, "");
}
function formatCepMask(d8){
if(d8.length!==8) return String(d8||"");
return d8.slice(0, 5) + "-" + d8.slice(5);
}
function wireCepAutofill(ctx, form){
var cepEl=form.elements.cep;
if(!cepEl) return;
var debounceTimer=null;
var lastFetchedDigits="";
var inFlight=false;
function fetchCep(digits){
if(digits.length!==8||inFlight) return;
if(digits===lastFetchedDigits) return;
inFlight=true;
fetch("https://viacep.com.br/ws/" + encodeURIComponent(digits) + "/json/", { mode: "cors" })
.then(function (r){
return r.json();
})
.then(function (data){
inFlight=false;
if(!data||data.erro===true){
lastFetchedDigits="";
toast(ctx, "CEP não encontrado.");
return;
}
lastFetchedDigits=digits;
if(form.endereco) form.endereco.value=String(data.logradouro||"").trim();
if(form.bairro) form.bairro.value=String(data.bairro||"").trim();
if(form.cidade) form.cidade.value=String(data.localidade||"").trim();
if(form.uf) form.uf.value=String(data.uf||"").trim().slice(0, 2).toUpperCase();
var d=onlyDigits(data.cep||cepEl.value);
if(d.length===8) cepEl.value=formatCepMask(d);
})
.catch(function (){
inFlight=false;
lastFetchedDigits="";
toast(ctx, "Não foi possível consultar o CEP.");
});
}
cepEl.addEventListener("input", function (){
clearTimeout(debounceTimer);
var d=onlyDigits(cepEl.value);
if(d.length < 8) lastFetchedDigits="";
debounceTimer=setTimeout(function (){
if(d.length===8) fetchCep(d);
}, 450);
});
cepEl.addEventListener("blur", function (){
clearTimeout(debounceTimer);
var d=onlyDigits(cepEl.value);
if(d.length===8){
cepEl.value=formatCepMask(d);
fetchCep(d);
}});
}
function buildSnapshot(u){
var p=u&&u.payload&&typeof u.payload==="object" ? u.payload:{};
var prof=u&&u.profile&&typeof u.profile==="object" ? u.profile:{};
var cpfRaw=u.cpf||pickFirst(p, ["cpf", "documento"])||"";
return {
nome: displayNome(u),
email: String(u.email||pickFirst(p, ["email", "mail"])||"").trim(),
telefone: String(u.telefone||pickFirst(p, ["telefone", "fone", "celular", "phone"])||"").trim(),
cpf: formatCpfDisplay(cpfRaw),
endereco: String(prof.endereco||pickFirst(p, ["endereco", "logradouro", "rua"])||"").trim(),
numero: String(prof.numero||pickFirst(p, ["numero", "num"])||"").trim(),
bairro: String(prof.bairro||pickFirst(p, ["bairro"])||"").trim(),
cidade: String(prof.cidade||pickFirst(p, ["cidade"])||"").trim(),
uf: String(prof.uf||pickFirst(p, ["uf", "estado"])||"").trim().slice(0, 2).toUpperCase(),
cep: String(prof.cep||pickFirst(p, ["cep"])||"").trim()
};}
function fillForm(node, snap){
var nomeEl=node.querySelector('[data-conta-display="nome"]');
var mailEl=node.querySelector('[data-conta-display="email"]');
if(nomeEl) nomeEl.textContent=snap.nome;
if(mailEl) mailEl.textContent=snap.email||"—";
var form=node.querySelector("[data-conta-form]");
if(!form) return;
var fields=["nome", "telefone", "cpf", "endereco", "numero", "bairro", "cidade", "uf", "cep"];
fields.forEach(function (name){
var inp=form.elements[name];
if(inp&&snap[name]!=null) inp.value=snap[name];
});
var sen=form.elements.senha;
if(sen) sen.value="";
}
window.BDMChatPages.conta=function (ctx){
ctx.state.currentView="conta";
var pages=window.BDMChatPages||{};
function mountGuest(msg){
ctx.loadTemplate("conta").then(function (html){
var node=ctx.htmlToNode(html);
var bodyEl=node.querySelector(".bdm-conta-body");
if(bodyEl){
bodyEl.innerHTML="";
bodyEl.appendChild(ctx.el("div", { class: "bdm-empty", text: msg }));
}
ctx.body.innerHTML="";
ctx.body.appendChild(node);
}).catch(function (){
ctx.body.textContent="Falha ao carregar.";
});
}
if(!pages.isLogged||!pages.isLogged()){
mountGuest("Faça login para acessar sua conta.");
return;
}
ctx.loadTemplate("conta").then(function (html){
var node=ctx.htmlToNode(html);
var u=pages.getUserRecord ? pages.getUserRecord():null;
var snap=buildSnapshot(u||{});
fillForm(node, snap);
var form=node.querySelector("[data-conta-form]");
if(form){
form.addEventListener("submit", function (ev){
ev.preventDefault();
var uid=pages.getUsuarioId ? pages.getUsuarioId():0;
if(!uid){
toast(ctx, "Não foi possível identificar o usuário. Faça login novamente.");
return;
}
var apiUrl=(ctx.urls.userUpdate||"").trim();
if(!apiUrl){
toast(ctx, "Atualização de cadastro não configurada.");
return;
}
var nome=String(form.nome&&form.nome.value||"").trim();
var telefone=String(form.telefone&&form.telefone.value||"").trim();
var cpf=String(form.cpf&&form.cpf.value||"").trim();
var endereco=String(form.endereco&&form.endereco.value||"").trim();
var numero=String(form.numero&&form.numero.value||"").trim();
var bairro=String(form.bairro&&form.bairro.value||"").trim();
var cidade=String(form.cidade&&form.cidade.value||"").trim();
var uf=String(form.uf&&form.uf.value||"").trim().slice(0, 2).toUpperCase();
var cep=String(form.cep&&form.cep.value||"").trim();
var senha=String(form.senha&&form.senha.value||"").trim();
var body={
id: uid,
nome: nome,
telefone: telefone,
cpf: onlyDigits(cpf),
cep: cep,
endereco: endereco,
numero: numero,
bairro: bairro,
cidade: cidade,
uf: uf
};
if(senha) body.senha=senha;
fetch(apiUrl, {
method: "POST",
credentials: "same-origin",
headers: window.BDMChatPages.mergeWidgetAuthHeaders({ "Content-Type": "application/json" }),
body: JSON.stringify(body)
})
.then(function (r){
return r.json().then(function (j){
return { ok: r.ok, json: j };});
})
.then(function (res){
var j=res.json||{};
var ok=pages.isPanelResultOk ? pages.isPanelResultOk(j, true):false;
if(!ok){
var errMsg="Não foi possível atualizar o cadastro.";
var o=j;
if(Array.isArray(o)&&o[0]&&typeof o[0]==="object") o=o[0];
if(o&&o.erro!=null&&String(o.erro).trim()){
errMsg=String(o.erro).trim();
}else if(j.erro!=null&&String(j.erro).trim()){
errMsg=String(j.erro).trim();
}else if(!res.ok){
errMsg="Falha ao salvar.";
}
toast(ctx, errMsg);
return;
}
var payload=j;
if(Array.isArray(payload)&&payload[0]&&typeof payload[0]==="object"){
payload=payload[0];
}
if(pages.applyUserApiResponse) pages.applyUserApiResponse(payload);
if(pages.saveUserProfile){
pages.saveUserProfile({
nome: nome,
telefone: telefone,
cpf: cpf,
endereco: endereco,
numero: numero,
bairro: bairro,
cidade: cidade,
uf: uf,
cep: cep
});
}
var u2=pages.getUserRecord ? pages.getUserRecord():null;
fillForm(node, buildSnapshot(u2||{}));
toast(ctx, "Dados atualizados com sucesso.");
})
.catch(function (){
toast(ctx, "Falha de conexão ao salvar.");
});
});
wireCepAutofill(ctx, form);
}
ctx.body.innerHTML="";
ctx.body.appendChild(node);
}).catch(function (){
ctx.body.textContent="Falha ao carregar.";
});
};})();