(function (){
var sdkPromise=null;
function loadMercadoPagoSdk(){
if(window.MercadoPago) return Promise.resolve();
if(sdkPromise) return sdkPromise;
sdkPromise=new Promise(function (resolve, reject){
var s=document.createElement("script");
s.src="https://sdk.mercadopago.com/js/v2";
s.async=true;
s.onload=function (){ resolve(); };
s.onerror=function (){ reject(new Error("Falha ao carregar SDK do Mercado Pago.")); };
document.head.appendChild(s);
});
return sdkPromise;
}
function destroyController(refName){
var c=window[refName];
if(c&&typeof c.unmount==="function"){
try { c.unmount(); } catch (e){}}
window[refName]=null;
}
function ensureContainerVisible(id, visible){
var el=document.getElementById(id);
if(!el) return;
el.style.display=visible ? "":"none";
}
function getSafeErrorMessage(payload){
if(!payload||typeof payload!=="object") return "Falha no pagamento.";
return String(payload.erro||payload.message||"Falha no pagamento.");
}
window.BDMChatStartPagamento=async function (cfg){
cfg=cfg||{};
var publicKey=String(cfg.publicKey||"").trim();
if(!publicKey) throw new Error("Mercado Pago public key ausente.");
var preferenceId=String(cfg.preferenceId||"").trim();
if(!preferenceId) throw new Error("Preference ID ausente.");
var amount=Number(cfg.amount||0);
if(!isFinite(amount)||amount <=0) throw new Error("Valor de pagamento inválido.");
await loadMercadoPagoSdk();
destroyController("paymentBrickController");
destroyController("statusScreenBrickController");
ensureContainerVisible("paymentBrick_container", true);
ensureContainerVisible("statusScreenBrick_container", false);
var mp=new window.MercadoPago(publicKey, { locale: "pt-BR" });
var bricksBuilder=mp.bricks();
var settings={
initialization: {
amount: Number(amount.toFixed(2)),
preferenceId: preferenceId,
},
customization: {
paymentMethods: {
creditCard: "all",
debitCard: "all",
bankTransfer: "all",
maxInstallments: 1
},
visual: {
style: {
theme: "dark"
}}
},
callbacks: {
onReady: function (){
if(typeof cfg.onReady==="function") cfg.onReady();
},
onSubmit: function (args){
return new Promise(function (resolve, reject){
fetch(String(cfg.submitUrl||""), {
method: "POST",
credentials: "same-origin",
headers: (window.BDMChatPages&&window.BDMChatPages.mergeWidgetAuthHeaders)
? window.BDMChatPages.mergeWidgetAuthHeaders({ "Content-Type": "application/json" })
: { "Content-Type": "application/json" },
body: JSON.stringify({
codigo_reserva: cfg.codigoReserva,
id_usuario: cfg.idUsuario,
form_data: args&&args.formData ? args.formData:{}})
})
.then(function (r){
return r.json().then(function (j){ return { status: r.status, json: j };});
})
.then(function (res){
var data=res&&res.json ? res.json:{};
if(res.status < 200||res.status >=300||data.erro||data.result==="error"){
var err=new Error(getSafeErrorMessage(data));
if(typeof cfg.onError==="function") cfg.onError(err);
reject(err);
return;
}
var paymentId=data.id||(data.data&&data.data.id);
if(paymentId&&typeof cfg.onPaymentCreated==="function"){
cfg.onPaymentCreated(paymentId, data);
}
resolve();
})
.catch(function (err){
if(typeof cfg.onError==="function") cfg.onError(err);
reject(err);
});
});
},
onError: function (error){
if(typeof cfg.onError==="function") cfg.onError(error);
}}
};
window.paymentBrickController=await bricksBuilder.create("payment", "paymentBrick_container", settings);
return window.paymentBrickController;
};
window.BDMChatRenderStatusBrick=async function (publicKey, paymentId){
if(!publicKey||!paymentId) return;
await loadMercadoPagoSdk();
destroyController("statusScreenBrickController");
var mp=new window.MercadoPago(String(publicKey), { locale: "pt-BR" });
var bricksBuilder=mp.bricks();
ensureContainerVisible("paymentBrick_container", false);
ensureContainerVisible("statusScreenBrick_container", true);
window.statusScreenBrickController=await bricksBuilder.create("statusScreen",
"statusScreenBrick_container",
{
initialization: { paymentId: paymentId },
customization: {
visual: { style: { theme: "dark" }}
},
callbacks: {
onReady: function (){},
onError: function (){}}
}
);
};})();