/**
* CARREGADOR DE PERFIS - Usando Data Manager
*
* Funções específicas para carregar e exibir dados dos perfis
* usando o sistema de cache inteligente.
*/
// ========================================
// CANTONEIRAS
// ========================================
/**
* Carrega dados das cantoneiras usando o Data Manager
*/
async function carregarCantoneirasV2() {
console.log('🔧 carregarCantoneirasV2() - Nova versão com Data Manager');
try {
// Verificar se o elemento existe
const tbody = document.getElementById('cantoneiras-tbody');
if (!tbody) {
console.error('❌ Elemento cantoneiras-tbody não encontrado!');
return;
}
console.log('✅ Elemento tbody encontrado');
// Mostrar loading
tbody.innerHTML = `
📊 Carregando cantoneiras do banco de dados...
`;
// Carregar dados via Data Manager
const dados = await window.dataManager.getData('cantoneiras');
if (!dados || dados.length === 0) {
tbody.innerHTML = `
❌ Nenhuma cantoneira encontrada no banco de dados.
`;
return;
}
console.log(`✅ ${dados.length} cantoneiras carregadas do Data Manager`);
console.log('🔍 Primeiro item:', dados[0]);
// Armazenar globalmente para filtros
window.cantoneirasData = dados;
console.log('💾 Dados armazenados em window.cantoneirasData');
// Exibir na tabela
console.log('🎨 Chamando exibirCantoneirasV2...');
console.log('🔍 Tipo de exibirCantoneirasV2:', typeof exibirCantoneirasV2);
if (typeof exibirCantoneirasV2 === 'function') {
exibirCantoneirasV2(dados);
} else {
console.error('❌ exibirCantoneirasV2 não é uma função!');
// Fallback: exibir diretamente
console.log('🔄 Usando fallback para exibir dados...');
const tbody = document.getElementById('cantoneiras-tbody');
if (tbody) {
tbody.innerHTML = dados.map(item => `
${item.nome}
${item.lado_mm}
${item.espessura_mm}
${item.peso_kg_m.toFixed(2)}
${item.area_cm2.toFixed(2)}
${item.momento_inercia_cm4.toFixed(2)}
${item.raio_giracao_cm.toFixed(2)}
${item.tipo}
`).join('');
console.log('✅ Tabela preenchida via fallback!');
} else {
console.error('❌ Elemento tbody não encontrado no fallback!');
}
}
// Atualizar contador
const totalEl = document.getElementById('cant-total');
if (totalEl) {
totalEl.textContent = dados.length;
}
} catch (error) {
console.error('❌ Erro ao carregar cantoneiras:', error);
const tbody = document.getElementById('cantoneiras-tbody');
if (tbody) {
tbody.innerHTML = `
❌ Erro ao carregar dados: ${error.message}
`;
}
}
}
/**
* Exibe cantoneiras na tabela (versão otimizada)
*/
function exibirCantoneirasV2(dados) {
console.log(`📋 Exibindo ${dados.length} cantoneiras na tabela`);
const tbody = document.getElementById('cantoneiras-tbody');
if (!tbody) {
console.error('❌ Elemento tbody não encontrado');
return;
}
if (!dados || dados.length === 0) {
tbody.innerHTML = `
Nenhuma cantoneira encontrada
`;
return;
}
// Gerar HTML otimizado
const html = dados.map(item => {
const badgeColor = getBadgeColorV2(item.tipo);
return `
${item.nome}
${item.lado_mm}
${item.espessura_mm}
${item.peso_kg_m.toFixed(2)}
${item.area_cm2.toFixed(2)}
${item.momento_inercia_cm4.toFixed(2)}
${item.raio_giracao_cm.toFixed(2)}
${item.tipo}
`;
}).join('');
tbody.innerHTML = html;
console.log('✅ Tabela atualizada com sucesso');
}
/**
* Filtra cantoneiras usando Data Manager
*/
function filtrarCantoneirasV2() {
if (!window.cantoneirasData) {
console.warn('⚠️ Dados não carregados ainda');
return;
}
// Obter filtros
const tamanho = document.getElementById('cant-tamanho')?.value || '';
const pesoMax = parseFloat(document.getElementById('cant-peso-max')?.value) || Infinity;
const busca = document.getElementById('cant-busca')?.value || '';
console.log('🔍 Aplicando filtros:', { tamanho, pesoMax, busca });
// Aplicar filtros usando Data Manager
let filtrados = window.cantoneirasData;
// Filtro por tipo/tamanho
if (tamanho) {
filtrados = window.dataManager.filterData(filtrados, { tipo: tamanho });
}
// Filtro por peso máximo
if (pesoMax < Infinity) {
filtrados = window.dataManager.filterData(filtrados, { peso_kg_m: { max: pesoMax } });
}
// Busca por nome
if (busca) {
filtrados = window.dataManager.searchData(filtrados, busca, ['nome', 'id']);
}
console.log(`🎯 Filtrados: ${filtrados.length} de ${window.cantoneirasData.length}`);
// Exibir resultados
exibirCantoneirasV2(filtrados);
// Atualizar contador
const totalEl = document.getElementById('cant-total');
if (totalEl) {
totalEl.textContent = filtrados.length;
}
}
/**
* Limpa filtros das cantoneiras
*/
function limparFiltrosCantoneirasV2() {
console.log('🧹 Limpando filtros');
// Limpar campos
const tamanhoEl = document.getElementById('cant-tamanho');
const pesoEl = document.getElementById('cant-peso-max');
const buscaEl = document.getElementById('cant-busca');
if (tamanhoEl) tamanhoEl.value = '';
if (pesoEl) pesoEl.value = '';
if (buscaEl) buscaEl.value = '';
// Exibir todos os dados
if (window.cantoneirasData) {
exibirCantoneirasV2(window.cantoneirasData);
const totalEl = document.getElementById('cant-total');
if (totalEl) {
totalEl.textContent = window.cantoneirasData.length;
}
}
}
/**
* Força atualização dos dados das cantoneiras
*/
async function atualizarDadosCantoneiras() {
console.log('🔄 Forçando atualização dos dados das cantoneiras...');
try {
// Limpar cache específico
localStorage.removeItem('acoCalcPro_cache_cantoneiras');
// Recarregar
await carregarCantoneirasV2();
// Notificar sucesso
alert('✅ Dados das cantoneiras atualizados com sucesso!');
} catch (error) {
console.error('❌ Erro ao atualizar dados:', error);
alert('❌ Erro ao atualizar dados: ' + error.message);
}
}
/**
* Retorna cor do badge (versão otimizada)
*/
function getBadgeColorV2(tipo) {
const cores = {
'Pequena': 'info',
'Média': 'success',
'Grande': 'warning',
'Muito Grande': 'warning',
'Extra-Grande': 'error',
'Massiva': 'error'
};
return cores[tipo] || 'info';
}
/**
* Ver detalhes de uma cantoneira específica
*/
function verDetalhesCantoneira(id) {
if (!window.cantoneirasData) {
alert('❌ Dados não carregados');
return;
}
const item = window.cantoneirasData.find(c => c.id === id);
if (!item) {
alert('❌ Cantoneira não encontrada');
return;
}
alert(`
📐 ${item.nome}
Lado: ${item.lado_mm} mm
Espessura: ${item.espessura_mm} mm
Peso: ${item.peso_kg_m.toFixed(2)} kg/m
Área: ${item.area_cm2.toFixed(2)} cm²
Momento de Inércia: ${item.momento_inercia_cm4.toFixed(2)} cm⁴
Raio de Giração: ${item.raio_giracao_cm.toFixed(2)} cm
Tipo: ${item.tipo}
`);
}
// Adicionar CSS para spinner
if (!document.getElementById('spinner-styles')) {
const style = document.createElement('style');
style.id = 'spinner-styles';
style.textContent = `
.spinner {
width: 20px;
height: 20px;
border: 2px solid var(--color-border);
border-top: 2px solid var(--color-primary);
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
`;
document.head.appendChild(style);
}
console.log('✅ Perfis Loader V2 carregado com Data Manager');