<?php
include 'verifica_login.php';
include 'conexao.php';
include 'config/base_utils.php';
$conn = conectar_banco();
garantir_estrutura_bases($conn);

$bases_existentes = listar_bases($conn, true);
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Importar Empresas - CSV</title>
<style>
    body { font-family: Arial, sans-serif; background-color: #f4f4f4; margin: 0; padding: 20px; }
    .container { max-width: 800px; margin: 0 auto; background: white; padding: 30px; border-radius: 8px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); }
    h1 { color: #004d99; border-bottom: 2px solid #ccc; padding-bottom: 10px; }
    .upload-area { border: 3px dashed #004d99; border-radius: 8px; padding: 40px; text-align: center; margin: 30px 0; background: #f9f9f9; }
    .upload-area:hover { background: #f0f8ff; border-color: #003366; }
    input[type="file"] { display: block; margin: 20px auto; padding: 10px; font-size: 1em; }
    button { background-color: #004d99; color: white; padding: 12px 24px; border: none; border-radius: 4px; cursor: pointer; font-size: 1em; }
    button:hover { background-color: #003366; }
    .btn-voltar { background-color: #6c757d; text-decoration: none; padding: 12px 24px; border-radius: 4px; color: white; display: inline-block; margin-top: 10px; }
    .info-box { background: #e3f2fd; padding: 20px; border-radius: 6px; margin: 20px 0; border-left: 4px solid #004d99; }
    .info-box h3 { margin-top: 0; color: #004d99; }
    .info-box ul { margin: 10px 0; padding-left: 20px; }
    .info-box li { margin: 5px 0; }
    .alert { padding: 15px; margin: 20px 0; border-radius: 6px; }
    .alert-success { background: #d4edda; color: #155724; border: 1px solid #c3e6cb; }
    .alert-error { background: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; }
    .alert-warning { background: #fff3cd; color: #856404; border: 1px solid #ffeeba; }
    
    /* Barra de Progresso */
    .progress-container { display: none; margin: 30px 0; }
    .progress-bar-wrapper { width: 100%; background: #e0e0e0; border-radius: 25px; height: 40px; overflow: hidden; box-shadow: inset 0 2px 4px rgba(0,0,0,0.1); position: relative; }
    .progress-bar { width: 0%; height: 100%; background: linear-gradient(90deg, #004d99 0%, #0066cc 100%); transition: width 0.3s ease; display: flex; align-items: center; justify-content: center; color: white; font-weight: bold; font-size: 16px; }
    .progress-info { text-align: center; margin-top: 15px; font-size: 14px; color: #666; }
    .progress-info .status { font-weight: bold; color: #004d99; font-size: 16px; }
</style>
</head>
<body>

<div class="container">
    <h1>📥 Importar Empresas via CSV</h1>
    
    <?php if (isset($_GET['msg'])): ?>
        <?php if ($_GET['msg'] === 'sucesso'): ?>
            <div class="alert alert-success">
                <strong>✓ Importação concluída com sucesso!</strong>
                <?php if (isset($_GET['total'])): ?>
                    <br>Total de registros importados: <strong><?= (int)$_GET['total'] ?></strong>
                <?php endif; ?>
            </div>
        <?php elseif ($_GET['msg'] === 'erro'): ?>
            <div class="alert alert-error">
                <strong>✗ Erro na importação:</strong>
                <?php if (isset($_GET['detalhe'])): ?>
                    <br><?= htmlspecialchars($_GET['detalhe']) ?>
                <?php endif; ?>
            </div>
        <?php endif; ?>
    <?php endif; ?>
    
    <div class="info-box">
        <h3>📋 Instruções de Importação</h3>
        <ul>
            <li>O arquivo deve estar no formato <strong>CSV (ponto e vírgula como separador)</strong></li>
            <li>A primeira linha deve conter os cabeçalhos (será ignorada)</li>
            <li>Campos obrigatórios: <strong>ID_EMPRESA</strong> e <strong>CNPJ</strong></li>
            <li>Campos compatíveis (layout atual): ID_EMPRESA, CNPJ, NOME_FANTASIA, EMPRESA, RUA, NUMERO, COMPL_NUM, BAIRRO, CIDADE, UF, CEP, DDD, TEL, CNAE, FUNCIONARIOS, SITE</li>
            <li>Também aceita layout estendido/legado (com colunas extras como PORTE, BASE, STATUS_EMPRESA etc.)</li>
            <li>Você deve escolher uma <strong>Base de destino</strong> (existente ou nova) para esta importação</li>
            <li>Todos os registros da base selecionada serão substituídos pelos dados do CSV</li>
            <li>Após importar, todas as empresas serão cadastradas como <strong>ATIVA = "S"</strong></li>
            <li>Campos vazios serão mantidos em branco</li>
        </ul>
    </div>
    
    <div class="alert alert-warning">
        <strong>⚠️ ATENÇÃO:</strong> Todos os registros existentes da base escolhida serão <strong>APAGADOS</strong> antes da importação. Esta operação não pode ser desfeita!
    </div>
    
    <!-- Barra de Progresso -->
    <div class="progress-container" id="progressContainer">
        <div class="progress-bar-wrapper">
            <div class="progress-bar" id="progressBar">0%</div>
        </div>
        <div class="progress-info">
            <div class="status" id="progressStatus">Iniciando importação...</div>
            <div id="progressDetails">Aguarde enquanto processamos o arquivo...</div>
        </div>
    </div>

    <form action="processar_importacao_empresas.php" method="POST" enctype="multipart/form-data" id="formImportacao" onsubmit="return iniciarImportacao(event)">
        <div style="background:#f8f9fa; border:1px solid #e0e0e0; border-radius:6px; padding:16px; margin-bottom:16px;">
            <h3 style="margin-top:0; color:#004d99;">🗂️ Base de destino</h3>

            <div style="display:flex; gap:20px; flex-wrap:wrap; margin-bottom:10px;">
                <label style="display:flex; align-items:center; gap:8px; font-weight:bold;">
                    <input type="radio" name="modo_base" value="existente" checked onclick="alternarModoBase()">
                    Usar base existente
                </label>
                <label style="display:flex; align-items:center; gap:8px; font-weight:bold;">
                    <input type="radio" name="modo_base" value="nova" onclick="alternarModoBase()">
                    Criar nova base
                </label>
            </div>

            <div id="boxBaseExistente" style="margin-top:8px;">
                <label style="display:block; font-weight:bold; margin-bottom:6px;">Selecionar base existente</label>
                <select name="idbase_existente" id="idbase_existente" style="width:100%; padding:10px; border:1px solid #ccc; border-radius:4px;">
                    <option value="">Selecione...</option>
                    <?php foreach ($bases_existentes as $base): ?>
                        <option value="<?= (int)$base['idbase'] ?>"><?= htmlspecialchars($base['nome_base']) ?></option>
                    <?php endforeach; ?>
                </select>
                <?php if (count($bases_existentes) === 0): ?>
                    <small style="color:#856404; display:block; margin-top:6px;">Nenhuma base cadastrada ainda. Selecione "Criar nova base".</small>
                <?php endif; ?>
            </div>

            <div id="boxBaseNova" style="margin-top:8px; display:none;">
                <label style="display:block; font-weight:bold; margin-bottom:6px;">Nome da nova base</label>
                <input type="text" name="base_nova" id="base_nova" maxlength="100" placeholder="Ex.: Base Abril 2026" style="width:100%; padding:10px; border:1px solid #ccc; border-radius:4px;">
            </div>
        </div>

        <div class="upload-area">
            <h2 style="color: #004d99; margin-top: 0;">📄 Selecione o arquivo CSV</h2>
            <input type="file" name="arquivo_csv" accept=".csv" required>
            <p style="color: #666; margin-top: 20px;">Formatos aceitos: .csv</p>
        </div>
        
        <div style="background: #fff3cd; padding: 20px; border-radius: 6px; margin: 20px 0; border: 2px solid #ffc107;">
            <label style="display: flex; align-items: center; cursor: pointer; font-size: 1.1em;">
                <input type="checkbox" id="confirmar_exclusao" required style="width: auto; margin-right: 10px; transform: scale(1.5);">
                <span style="color: #856404; font-weight: bold;">Confirmo que desejo APAGAR todos os registros existentes e importar os novos dados</span>
            </label>
        </div>
        
        <div style="text-align: center; margin-top: 30px;">
            <button type="submit">🚀 Iniciar Importação</button>
            <a href="empresas.php" class="btn-voltar">← Voltar para Empresas</a>
        </div>
    </form>
</div>

<script>
function confirmarImportacao() {
    const modoBase = document.querySelector('input[name="modo_base"]:checked')?.value || 'existente';
    let baseSelecionada = '';

    if (modoBase === 'nova') {
        baseSelecionada = (document.getElementById('base_nova').value || '').trim();
        if (!baseSelecionada) {
            alert('Informe o nome da nova base.');
            return false;
        }
    } else {
        const selectBase = document.getElementById('idbase_existente');
        const idBaseSelecionado = (selectBase.value || '').trim();
        if (!idBaseSelecionado) {
            alert('Selecione uma base existente.');
            return false;
        }
        baseSelecionada = (selectBase.selectedOptions[0]?.text || '').trim();
    }

    return confirm('⚠️ ÚLTIMA CONFIRMAÇÃO\n\nA base "' + baseSelecionada + '" será substituída pelos dados do CSV.\n\nDeseja realmente continuar com a importação?');
}

function alternarModoBase() {
    const modoBase = document.querySelector('input[name="modo_base"]:checked')?.value || 'existente';
    const boxExistente = document.getElementById('boxBaseExistente');
    const boxNova = document.getElementById('boxBaseNova');
    const inputBaseExistente = document.getElementById('idbase_existente');
    const inputBaseNova = document.getElementById('base_nova');

    if (modoBase === 'nova') {
        boxExistente.style.display = 'none';
        boxNova.style.display = 'block';
        inputBaseExistente.required = false;
        inputBaseNova.required = true;
    } else {
        boxExistente.style.display = 'block';
        boxNova.style.display = 'none';
        inputBaseExistente.required = true;
        inputBaseNova.required = false;
    }
}

async function iniciarImportacao(event) {
    event.preventDefault();
    
    // Confirmar ação
    if (!confirmarImportacao()) {
        return false;
    }
    
    const form = document.getElementById('formImportacao');
    const formData = new FormData(form);
    const progressContainer = document.getElementById('progressContainer');
    const progressBar = document.getElementById('progressBar');
    const progressStatus = document.getElementById('progressStatus');
    const progressDetails = document.getElementById('progressDetails');
    const btnSubmit = form.querySelector('button[type="submit"]');
    
    // Mostrar barra de progresso e desabilitar botão
    progressContainer.style.display = 'block';
    btnSubmit.disabled = true;
    btnSubmit.textContent = '⏳ Processando...';
    form.style.opacity = '0.6';
    form.style.pointerEvents = 'none';
    
    try {
        // Simular progresso inicial
        atualizarProgresso(10, 'Enviando arquivo...', 'Aguarde...');
        
        const xhr = new XMLHttpRequest();
        
        // Monitorar progresso do upload
        xhr.upload.addEventListener('progress', function(e) {
            if (e.lengthComputable) {
                const percentComplete = Math.min(30, Math.round((e.loaded / e.total) * 30));
                atualizarProgresso(percentComplete, 'Enviando arquivo...', `${percentComplete}% enviado`);
            }
        });
        
        xhr.onreadystatechange = function() {
            if (xhr.readyState === XMLHttpRequest.OPENED) {
                atualizarProgresso(5, 'Conectando ao servidor...', 'Estabelecendo conexão...');
            } else if (xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
                atualizarProgresso(35, 'Processando arquivo...', 'Lendo dados do CSV...');
            } else if (xhr.readyState === XMLHttpRequest.LOADING) {
                atualizarProgresso(60, 'Importando dados...', 'Inserindo registros no banco de dados...');
            } else if (xhr.readyState === XMLHttpRequest.DONE) {
                if (xhr.status === 200 || xhr.status === 302) {
                    atualizarProgresso(100, '✓ Importação concluída!', 'Redirecionando...');

                    // Em XHR, redirecionamentos HTTP costumam ser seguidos automaticamente.
                    // Por isso, usamos responseURL (URL final) para manter mensagem real de sucesso/erro.
                    const urlFinal = xhr.responseURL || '';
                    if (urlFinal && /^https?:\/\//i.test(urlFinal)) {
                        setTimeout(() => {
                            window.location.href = urlFinal;
                        }, 1000);
                    } else {
                        const locationHeader = xhr.getResponseHeader('Location');
                        setTimeout(() => {
                            window.location.href = locationHeader || 'empresas.php';
                        }, 1000);
                    }
                } else {
                    throw new Error('Erro no processamento: ' + xhr.status);
                }
            }
        };
        
        xhr.open('POST', 'processar_importacao_empresas.php', true);
        xhr.send(formData);
        
    } catch (error) {
        atualizarProgresso(0, '✗ Erro na importação', error.message);
        btnSubmit.disabled = false;
        btnSubmit.textContent = '🚀 Iniciar Importação';
        form.style.opacity = '1';
        form.style.pointerEvents = 'auto';
        alert('Erro ao processar importação: ' + error.message);
    }
    
    return false;
}

function atualizarProgresso(percentual, status, detalhes) {
    const progressBar = document.getElementById('progressBar');
    const progressStatus = document.getElementById('progressStatus');
    const progressDetails = document.getElementById('progressDetails');
    
    progressBar.style.width = percentual + '%';
    progressBar.textContent = percentual + '%';
    progressStatus.textContent = status;
    progressDetails.textContent = detalhes;
}

alternarModoBase();
</script>
