function doGet(e) {
// LOG para debug (vai aparecer nos logs do Apps Script)
[Link]("Parâmetros recebidos:", [Link](e));
// Se não tem parâmetros, mostra DASHBOARD
if (!e || ![Link]) {
return HtmlService
.createTemplateFromFile("dashboard")
.evaluate()
.setTitle("Dashboard Evento")
.setXFrameOptionsMode([Link]);
}
const page = [Link];
const id = [Link];
// Se tem ID, mostra validação
if (id) {
return validarPresencaPage(id);
}
// Se page=scanner, mostra scanner
if (page === "scanner") {
return HtmlService
.createTemplateFromFile("scanner")
.evaluate()
.setTitle("Scanner QR")
.setXFrameOptionsMode([Link]);
}
// Qualquer outro caso: Dashboard
return HtmlService
.createTemplateFromFile("dashboard")
.evaluate()
.setTitle("Dashboard Evento")
.setXFrameOptionsMode([Link]);
}
// Página de validação individual (QR code)
function validarPresencaPage(id) {
const resultado = registrarEntrada(id);
let html = `
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Validação de Entrada</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
.card {
background: white;
border-radius: 20px;
padding: 40px;
text-align: center;
box-shadow: 0 10px 40px rgba(0,0,0,0.2);
max-width: 400px;
width: 90%;
}
.sucesso { color: #10b981; font-size: 64px; }
.erro { color: #ef4444; font-size: 64px; }
.duplicado { color: #f59e0b; font-size: 64px; }
h2 { margin: 20px 0 10px; }
p { color: #666; margin: 10px 0; }
.botao {
display: inline-block;
margin-top: 20px;
padding: 10px 20px;
background: #667eea;
color: white;
text-decoration: none;
border-radius: 10px;
cursor: pointer;
}
</style>
</head>
<body>
<div class="card">
`;
if([Link] == "ok") {
html += `
<div class="sucesso">✅</div>
<h2>LIBERADO!</h2>
<p><strong>${[Link]}</strong></p>
<p>Tipo: ${[Link]}</p>
<p>Entrada registrada com sucesso!</p>
`;
} else if([Link] == "duplicado") {
html += `
<div class="duplicado">⚠️</div>
<h2>JÁ ENTROU</h2>
<p><strong>${[Link]}</strong></p>
<p>Este participante já registrou entrada anteriormente.</p>
`;
} else {
html += `
<div class="erro">❌</div>
<h2>QR INVÁLIDO</h2>
<p>ID: ${id}</p>
<p>Este código não está cadastrado no sistema.</p>
`;
}
html += `
<button class="botao" onclick="[Link]()">Fechar</button>
</div>
</body>
</html>
`;
return [Link](html);
}
function registrarEntrada(id){
const aba = [Link]().getSheetByName("Participantes");
const dados = [Link]().getValues();
for(let i = 1; i < [Link]; i++){
const linha = i + 1;
if(String(dados[i][0]).trim() == String(id).trim()){
if(dados[i][3] == "PRESENTE"){
return { status:"duplicado", nome: dados[i][1] ? dados[i][1] : "ID: " + dados[i][0] };
}
[Link](linha,4).setValue("PRESENTE");
[Link](linha,5).setValue(new Date());
return { status:"ok", nome: dados[i][1] ? dados[i][1] : "ID: " + dados[i][0], tipo: dados[i][2] ?
dados[i][2] : "Geral" };
}
}
return { status:"erro" };
}
function getPainel(){
const aba = [Link]().getSheetByName("Participantes");
const dados = [Link]().getValues();
let total = 0;
let presentes = 0;
let lista = [];
for(let i = 1; i < [Link]; i++){
if(!dados[i][0] || String(dados[i][0]).trim() === "") continue;
total++;
if(dados[i][3] == "PRESENTE"){
presentes++;
let horaFormatada = "Horário indisponível";
if(dados[i][4]) {
try {
horaFormatada = [Link](new Date(dados[i][4]), [Link](),
"HH:mm:ss");
} catch(err) {
horaFormatada = String(dados[i][4]);
}
}
let nomeExibicao = dados[i][1] ? String(dados[i][1]).trim() : "ID: " + dados[i][0];
let tipoExibicao = dados[i][2] ? String(dados[i][2]).trim() : "Não informado";
[Link]({ nome: nomeExibicao, tipo: tipoExibicao, hora: horaFormatada });
}
}
return { total: total, presentes: presentes, faltam: (total - presentes) < 0 ? 0 : (total - presentes),
lista: [Link]() };
}