@@ -288,16 +288,6 @@ <h3>🔒 Seu voto é 100% Auditável</h3>
288288</ div >
289289
290290< script >
291- // ==============================
292- // DEBUG - MOSTRAR INFORMAÇÕES (remover depois)
293- // ==============================
294- function debugInfo ( msg ) {
295- const debugDiv = document . getElementById ( "debugInfo" ) ;
296- debugDiv . style . display = "block" ;
297- debugDiv . innerHTML += msg + "<br>" ;
298- console . log ( "🔍 DEBUG:" , msg ) ;
299- }
300-
301291// ==============================
302292// BLOQUEIO TOTAL DE NAVEGAÇÃO
303293// ==============================
@@ -324,50 +314,42 @@ <h3>🔒 Seu voto é 100% Auditável</h3>
324314// CARREGAR DADOS DO VOTO - CORRIGIDO
325315// ==============================
326316async function carregarDadosVoto ( ) {
327- debugInfo ( "🚀 INICIANDO CARREGAMENTO..." ) ;
317+ console . log ( "🚀 INICIANDO CARREGAMENTO..." ) ;
328318
329319 const db = new PouchDB ( 'terra_dourada_votos_local' ) ;
330320 const dbCandidatos = new PouchDB ( 'terra_dourada_candidatos' ) ;
331321
332322 try {
333- // DEBUG: Mostra todos os candidatos do banco
334- const todosCandidatos = await dbCandidatos . allDocs ( { include_docs : true } ) ;
335- debugInfo ( "====== TODOS OS CANDIDATOS NO BANCO ======" ) ;
336- todosCandidatos . rows . forEach ( candidato => {
337- debugInfo ( `📋 ${ candidato . doc . _id } : ${ candidato . doc . nome } - Foto: ${ candidato . doc . foto || 'NÃO' } ` ) ;
338- } ) ;
339- debugInfo ( "===========================================" ) ;
340-
341323 // 1. PRIMEIRO: Tenta pegar do localStorage (mais rápido)
342324 const candidatoIdLocal = localStorage . getItem ( "voto_candidato" ) ;
343325 const cidPinataLocal = localStorage . getItem ( "voto_cid" ) ;
344326
345- debugInfo ( "📱 LocalStorage - candidatoId: " + candidatoIdLocal ) ;
346- debugInfo ( "📱 LocalStorage - cidPinata: " + cidPinataLocal ) ;
327+ console . log ( "📱 LocalStorage - candidatoId:" , candidatoIdLocal ) ;
328+ console . log ( "📱 LocalStorage - cidPinata:" , cidPinataLocal ) ;
347329
348330 if ( candidatoIdLocal && candidatoIdLocal !== "branco" ) {
349- debugInfo ( "✅ Usando dados do LocalStorage" ) ;
331+ console . log ( "✅ Usando dados do LocalStorage" ) ;
350332 await carregarCandidatoPorId ( candidatoIdLocal , ! ! cidPinataLocal , cidPinataLocal ) ;
351333 return ;
352334 }
353335
354336 // 2. SEGUNDO: Se não tem no localStorage, busca no banco
355- debugInfo ( "🔍 Buscando no banco de dados..." ) ;
337+ console . log ( "🔍 Buscando no banco de dados..." ) ;
356338 const cid = localStorage . getItem ( "user_cid" ) ;
357339
358340 if ( ! cid ) {
359341 throw new Error ( "CID do usuário não encontrado" ) ;
360342 }
361343
362344 const allDocs = await db . allDocs ( { include_docs : true } ) ;
363- debugInfo ( "📊 Total de documentos no DB: " + allDocs . rows . length ) ;
345+ console . log ( "📊 Total de documentos no DB:" , allDocs . rows . length ) ;
364346
365347 // Filtra votos deste usuário
366348 const votosUsuario = allDocs . rows . filter ( row =>
367349 row . doc . eleitor === cid && row . doc . candidato_id
368350 ) ;
369351
370- debugInfo ( "🗳️ Votos deste usuário: " + votosUsuario . length ) ;
352+ console . log ( "🗳️ Votos deste usuário:" , votosUsuario . length ) ;
371353
372354 if ( votosUsuario . length > 0 ) {
373355 // Pega o voto mais recente
@@ -380,9 +362,9 @@ <h3>🔒 Seu voto é 100% Auditável</h3>
380362 const cidPinata = dadosVoto . cid_pinata ;
381363 const candidatoId = dadosVoto . candidato_id ;
382364
383- debugInfo ( "✅ Último voto - candidatoId: " + candidatoId ) ;
384- debugInfo ( "✅ Último voto - usouBackend: " + usouBackend ) ;
385- debugInfo ( "✅ Último voto - cidPinata: " + cidPinata ) ;
365+ console . log ( "✅ Último voto - candidatoId:" , candidatoId ) ;
366+ console . log ( "✅ Último voto - usouBackend:" , usouBackend ) ;
367+ console . log ( "✅ Último voto - cidPinata:" , cidPinata ) ;
386368
387369 // Salva no localStorage para próxima vez
388370 if ( candidatoId && candidatoId !== "branco" ) {
@@ -399,7 +381,7 @@ <h3>🔒 Seu voto é 100% Auditável</h3>
399381 }
400382
401383 } catch ( error ) {
402- debugInfo ( "❌ ERRO: " + error . message ) ;
384+ console . error ( "❌ ERRO:" , error . message ) ;
403385
404386 // Fallback completo
405387 document . getElementById ( "fotoContainer" ) . innerHTML = '<div class="foto-vazia">✓</div>' ;
@@ -412,53 +394,53 @@ <h3>🔒 Seu voto é 100% Auditável</h3>
412394}
413395
414396// ==============================
415- // CARREGAR CANDIDATO POR ID - BUSCANDO FOTO DO CADASTRO
397+ // CARREGAR CANDIDATO POR ID - BUSCANDO FOTO DO CADASTRO (CORRIGIDO)
416398// ==============================
417399async function carregarCandidatoPorId ( candidatoId , usouBackend , cidPinata , dadosVoto = null ) {
418- debugInfo ( "👤 Buscando candidato ID: " + candidatoId ) ;
400+ console . log ( "👤 Buscando candidato ID:" , candidatoId ) ;
419401
420402 const dbCandidatos = new PouchDB ( 'terra_dourada_candidatos' ) ;
421403
422404 try {
423- // Busca TODOS os candidatos
424- const candidatosResult = await dbCandidatos . allDocs ( { include_docs : true } ) ;
425- debugInfo ( "📋 Total de candidatos no DB: " + candidatosResult . rows . length ) ;
426-
427- // ⭐⭐ CORREÇÃO: Mostra todos os candidatos para debug
428- candidatosResult . rows . forEach ( row => {
429- debugInfo ( "📝 Candidato no DB: " + row . doc . _id + " - " + row . doc . nome + " - Foto: " + ( row . doc . foto ? "SIM" : "NÃO" ) ) ;
430- } ) ;
431-
432- // Procura o candidato pelo ID
433- const candidatoEncontrado = candidatosResult . rows . find ( row => row . doc . _id === candidatoId ) ;
405+ // ⭐⭐ CORREÇÃO: Busca o candidato DIRETAMENTE pelo ID
406+ let candidato ;
434407
435- if ( candidatoEncontrado ) {
436- const candidato = candidatoEncontrado . doc ;
437- debugInfo ( "🎯 Candidato encontrado: " + candidato . nome ) ;
438- debugInfo ( "🎯 Foto do candidato: " + ( candidato . foto ? candidato . foto : "NÃO TEM FOTO" ) ) ;
408+ try {
409+ // Tenta buscar pelo ID exato primeiro (mais eficiente)
410+ candidato = await dbCandidatos . get ( candidatoId ) ;
411+ console . log ( "✅ Candidato encontrado via get():" , candidato . nome ) ;
412+ console . log ( "📸 Foto via get():" , candidato . foto ? "Base64 presente" : "NÃO TEM FOTO" ) ;
439413
440- // ⭐⭐ CORREÇÃO: Passa o candidato COMPLETO (com foto) para a interface
441- atualizarInterfaceCandidato ( candidato , usouBackend , cidPinata , dadosVoto ) ;
442- } else {
443- debugInfo ( "❌ Candidato não encontrado no DB, usando fallback" ) ;
414+ } catch ( getError ) {
415+ console . log ( "⚠️ Não encontrado via get(), buscando em allDocs..." ) ;
444416
445- // Fallback: usa dados do voto se disponível
446- const candidatoFallback = {
447- _id : candidatoId ,
448- nome : dadosVoto ?. candidato_nome || "Candidato Escolhido" ,
449- foto : null , // ⭐⭐ Não tem foto no fallback
450- partido : dadosVoto ?. candidato_partido || ""
451- } ;
417+ // Fallback: busca em todos os documentos
418+ const todosCandidatos = await dbCandidatos . allDocs ( { include_docs : true } ) ;
419+ const candidatoEncontrado = todosCandidatos . rows . find ( row => row . id === candidatoId ) ;
452420
453- atualizarInterfaceCandidato ( candidatoFallback , usouBackend , cidPinata , dadosVoto ) ;
421+ if ( candidatoEncontrado ) {
422+ candidato = candidatoEncontrado . doc ;
423+ console . log ( "✅ Candidato encontrado via allDocs():" , candidato . nome ) ;
424+ console . log ( "📸 Foto via allDocs():" , candidato . foto ? "Base64 presente" : "NÃO TEM FOTO" ) ;
425+ } else {
426+ throw new Error ( "Candidato não encontrado em allDocs" ) ;
427+ }
428+ }
429+
430+ // ⭐⭐ CORREÇÃO: Verifica se a foto é Base64 válida
431+ if ( candidato . foto && ! candidato . foto . startsWith ( 'data:image' ) ) {
432+ console . warn ( "⚠️ Foto não é Base64 válida:" , candidato . foto . substring ( 0 , 50 ) + "..." ) ;
454433 }
434+
435+ atualizarInterfaceCandidato ( candidato , usouBackend , cidPinata , dadosVoto ) ;
436+
455437 } catch ( error ) {
456- debugInfo ( "❌ Erro ao buscar candidato: " + error . message ) ;
438+ console . error ( "❌ Erro ao buscar candidato:" , error . message ) ;
457439
458- // Fallback de emergência
440+ // Fallback: usa dados do voto se disponível
459441 const candidatoFallback = {
460442 _id : candidatoId ,
461- nome : "Seu Candidato",
443+ nome : dadosVoto ?. candidato_nome || " Candidato Escolhido ",
462444 foto : null
463445 } ;
464446
@@ -467,54 +449,54 @@ <h3>🔒 Seu voto é 100% Auditável</h3>
467449}
468450
469451// ==============================
470- // ATUALIZAR INTERFACE - CARREGANDO FOTO DO CANDIDATO
452+ // ATUALIZAR INTERFACE - CARREGANDO FOTO DO CANDIDATO (CORRIGIDO)
471453// ==============================
472454function atualizarInterfaceCandidato ( candidato , usouBackend , cidPinata , dadosVoto ) {
473455 const fotoContainer = document . getElementById ( "fotoContainer" ) ;
474456 const nomeElement = document . getElementById ( "nome" ) ;
475457 const statusElement = document . getElementById ( "statusVoto" ) ;
476458
477- debugInfo ( "🎨 Atualizando interface: " + candidato . nome ) ;
478- debugInfo ( "🖼️ Foto disponível: " + ( candidato . foto ? candidato . foto : "NÃO" ) ) ;
459+ console . log ( "🎨 Atualizando interface:" , candidato . nome ) ;
460+ console . log ( "🖼️ Foto disponível:" , ! ! candidato . foto ) ;
479461
480462 // Atualiza nome
481463 nomeElement . textContent = candidato . nome ;
482464
483465 // ⭐⭐ CORREÇÃO: Carrega a foto do candidato se existir
484- if ( candidato . foto ) {
485- debugInfo ( "📸 Tentando carregar foto do candidato..." ) ;
466+ if ( candidato . foto && candidato . foto . startsWith ( 'data:image' ) ) {
467+ console . log ( "📸 Carregando foto Base64 do candidato..." ) ;
468+
469+ // Mostra loading enquanto a imagem carrega
470+ fotoContainer . innerHTML = '<div class="foto-vazia" style="color: #d4af37;">⏳</div>' ;
486471
487472 const img = new Image ( ) ;
488473 img . className = "foto-candidato" ;
489474 img . alt = candidato . nome ;
490475
491- // Usa a foto original do cadastro do candidato
476+ // ⭐⭐ CORREÇÃO: Usa a foto Base64 diretamente
492477 img . src = candidato . foto ;
493478
494479 img . onload = function ( ) {
495- debugInfo ( "✅ Foto do candidato carregada com sucesso!" ) ;
480+ console . log ( "✅ Foto do candidato carregada com sucesso!" ) ;
496481 fotoContainer . innerHTML = '' ;
497482 fotoContainer . appendChild ( img ) ;
498483 } ;
499484
500485 img . onerror = function ( ) {
501- debugInfo ( "❌ Erro ao carregar foto do candidato, usando ícone" ) ;
502- // Se a foto não carregar, usa ícone baseado no tipo de voto
503- if ( candidato . _id === "branco" || candidato . nome . includes ( "BRANCO" ) ) {
486+ console . log ( "❌ Erro ao carregar foto do candidato, usando ícone" ) ;
487+ // Fallback para ícone
488+ if ( candidato . _id === "branco" || candidato . nome . toUpperCase ( ) . includes ( "BRANCO" ) ) {
504489 fotoContainer . innerHTML = '<div class="foto-vazia">⚪</div>' ;
505490 } else {
506491 fotoContainer . innerHTML = '<div class="foto-vazia">👤</div>' ;
507492 }
508493 } ;
509494
510- // Coloca a imagem imediatamente
511- fotoContainer . innerHTML = '' ;
512- fotoContainer . appendChild ( img ) ;
513-
514495 } else {
515- debugInfo ( "📷 Candidato não tem foto cadastrada" ) ;
516- // Candidato sem foto - usa ícone
517- if ( candidato . _id === "branco" || candidato . nome . includes ( "BRANCO" ) ) {
496+ console . log ( "📷 Candidato não tem foto Base64 válida:" , candidato . foto ? "Tem campo mas não é Base64" : "Campo vazio" ) ;
497+
498+ // Candidato sem foto - usa ícone baseado no tipo
499+ if ( candidato . _id === "branco" || ( candidato . nome && candidato . nome . toUpperCase ( ) . includes ( "BRANCO" ) ) ) {
518500 fotoContainer . innerHTML = '<div class="foto-vazia">⚪</div>' ;
519501 } else {
520502 fotoContainer . innerHTML = '<div class="foto-vazia">👤</div>' ;
@@ -533,6 +515,9 @@ <h3>🔒 Seu voto é 100% Auditável</h3>
533515 atualizarBotaoComprovante ( usouBackend , cidPinata ) ;
534516}
535517
518+ // ==============================
519+ // ATUALIZAR BOTÃO DE COMPROVANTE
520+ // ==============================
536521function atualizarBotaoComprovante ( usouBackend , cidPinata ) {
537522 const provaBtn = document . getElementById ( "provaBtn" ) ;
538523 const tooltipText = document . getElementById ( "tooltipText" ) ;
@@ -556,17 +541,48 @@ <h3>🔒 Seu voto é 100% Auditável</h3>
556541 }
557542}
558543
544+ // ==============================
545+ // SAIR DO SISTEMA
546+ // ==============================
559547function sairDoSistema ( ) {
560548 localStorage . removeItem ( "voto_cid" ) ;
561549 localStorage . removeItem ( "voto_candidato" ) ;
562550 window . location . href = "index.html" ;
563551}
564552
553+ // ==============================
554+ // DIAGNÓSTICO TEMPORÁRIO (REMOVER DEPOIS)
555+ // ==============================
556+ async function diagnosticoCompleto ( ) {
557+ try {
558+ const dbCandidatos = new PouchDB ( 'terra_dourada_candidatos' ) ;
559+ const todos = await dbCandidatos . allDocs ( { include_docs : true } ) ;
560+
561+ console . log ( "====== DIAGNÓSTICO COMPLETO DOS CANDIDATOS ======" ) ;
562+ todos . rows . forEach ( row => {
563+ const doc = row . doc ;
564+ console . log ( `📋 ${ doc . nome } (${ doc . _id } )` , {
565+ temFoto : ! ! doc . foto ,
566+ tipoFoto : doc . foto ? ( doc . foto . startsWith ( 'data:image' ) ? 'Base64 Válida' : 'Formato Inválido' ) : 'NULL' ,
567+ previewFoto : doc . foto ? doc . foto . substring ( 0 , 30 ) + '...' : 'N/A'
568+ } ) ;
569+ } ) ;
570+ console . log ( "=================================================" ) ;
571+ } catch ( error ) {
572+ console . error ( "Erro no diagnóstico:" , error ) ;
573+ }
574+ }
575+
565576// ==============================
566577// INICIALIZAÇÃO
567578// ==============================
568579document . addEventListener ( 'DOMContentLoaded' , function ( ) {
569- debugInfo ( "📄 Página carregada - iniciando..." ) ;
580+ console . log ( "📄 Página carregada - iniciando..." ) ;
581+
582+ // Executa diagnóstico temporário
583+ diagnosticoCompleto ( ) ;
584+
585+ // Carrega dados do voto
570586 carregarDadosVoto ( ) ;
571587
572588 window . onbeforeunload = function ( ) {
0 commit comments