<?php
include 'verifica_login.php';
include 'conexao.php';
include 'config/cliente_projeto_utils.php';
include 'config/log_utils.php';

$conn = conectar_banco();
garantir_estrutura_clientes_projetos($conn);
garantir_estrutura_logs($conn);

function slug_nome_arquivo($texto) {
    $texto = (string)$texto;
    $texto = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $texto);
    $texto = strtolower($texto);
    $texto = preg_replace('/[^a-z0-9]+/', '_', $texto);
    $texto = trim((string)$texto, '_');
    return $texto !== '' ? $texto : 'arquivo';
}

function csv_string_de_resultado($cabecalho, $linhas) {
    $stream = fopen('php://temp', 'r+');
    fprintf($stream, chr(0xEF) . chr(0xBB) . chr(0xBF));
    fputcsv($stream, $cabecalho, ';');
    foreach ($linhas as $linha) {
        fputcsv($stream, $linha, ';');
    }
    rewind($stream);
    $conteudo = stream_get_contents($stream);
    fclose($stream);
    return $conteudo;
}

if (($_GET['action'] ?? '') === 'list_questionarios') {
    header('Content-Type: application/json; charset=utf-8');
    $id_projeto = (int)($_GET['id_projeto'] ?? 0);
    if ($id_projeto <= 0) {
        echo json_encode(['success' => false, 'questionarios' => []]);
        exit;
    }

    $stmt_q = $conn->prepare("SELECT id, nome FROM questionario_template WHERE ativo = 'S' AND id_projeto_fk = ? ORDER BY nome");
    $stmt_q->bind_param('i', $id_projeto);
    $stmt_q->execute();
    $res_q = $stmt_q->get_result();
    $questionarios = [];
    while ($q = $res_q->fetch_assoc()) {
        $questionarios[] = ['id' => (int)$q['id'], 'nome' => $q['nome']];
    }
    echo json_encode(['success' => true, 'questionarios' => $questionarios], JSON_UNESCAPED_UNICODE);
    exit;
}

$projetos = listar_projetos($conn, true);
$erro = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'exportar') {
    $id_projeto = (int)($_POST['id_projeto'] ?? 0);
    $id_questionario = (int)($_POST['id_questionario'] ?? 0);

    if ($id_projeto <= 0 || $id_questionario <= 0) {
        $erro = 'Selecione o projeto e o questionário.';
    } else {
        $stmt_meta = $conn->prepare("
            SELECT p.nome_projeto, qt.nome AS nome_questionario
            FROM questionario_template qt
            INNER JOIN projetos p ON p.id_projeto = qt.id_projeto_fk
            WHERE qt.id = ? AND qt.id_projeto_fk = ?
            LIMIT 1
        ");
        $stmt_meta->bind_param('ii', $id_questionario, $id_projeto);
        $stmt_meta->execute();
        $meta = $stmt_meta->get_result()->fetch_assoc();

        if (!$meta) {
            $erro = 'Questionário inválido para o projeto selecionado.';
        } else {
            $projeto_nome = (string)$meta['nome_projeto'];
            $questionario_nome = (string)$meta['nome_questionario'];
            $data_nome = date('Ymd_His');
            $base_nome = slug_nome_arquivo($projeto_nome) . '_' . slug_nome_arquivo($questionario_nome);

            // CSV 1: Empresas
            $stmt_emp = $conn->prepare("
                SELECT DISTINCT
                    e.ID_EMPRESA,
                    e.EMPRESA,
                    e.NOME_FANTASIA,
                    e.CNPJ,
                    e.CNAE,
                    e.CIDADE,
                    e.UF,
                    e.TEL,
                    pe.id AS id_pesquisa_empresa,
                    pe.status,
                    pe.data_resposta,
                    pe.nota_total,
                    pe.classificacao
                FROM pesquisa_empresa pe
                INNER JOIN pesquisas p ON p.id = pe.id_pesquisa_fk
                INNER JOIN empresas e ON e.ID_EMPRESA = pe.id_empresa_fk
                WHERE p.id_projeto_fk = ? AND p.id_questionario_template_fk = ?
                ORDER BY e.NOME_FANTASIA
            ");
            $stmt_emp->bind_param('ii', $id_projeto, $id_questionario);
            $stmt_emp->execute();
            $res_emp = $stmt_emp->get_result();
            $linhas_empresas = [];
            while ($r = $res_emp->fetch_assoc()) {
                $linhas_empresas[] = [
                    $r['ID_EMPRESA'],
                    $r['EMPRESA'],
                    $r['NOME_FANTASIA'],
                    $r['CNPJ'],
                    $r['CNAE'],
                    $r['CIDADE'],
                    $r['UF'],
                    $r['TEL'],
                    $r['id_pesquisa_empresa'],
                    $r['status'],
                    $r['data_resposta'],
                    $r['nota_total'],
                    $r['classificacao']
                ];
            }
            $csv_empresas = csv_string_de_resultado(
                ['ID_EMPRESA', 'RAZAO_SOCIAL', 'NOME_FANTASIA', 'CNPJ', 'CNAE', 'CIDADE', 'UF', 'TELEFONE', 'ID_PESQUISA_EMPRESA', 'STATUS', 'DATA_RESPOSTA', 'NOTA_TOTAL', 'CLASSIFICACAO'],
                $linhas_empresas
            );

            // CSV 2: Contatos da empresa
            $stmt_cont = $conn->prepare("
                SELECT DISTINCT
                    ce.idcontatos_empresa,
                    ce.id_empresa,
                    ce.nome,
                    ce.sobrenome,
                    ce.cargo,
                    ce.email,
                    ce.ddd,
                    ce.tel,
                    ce.celular,
                    ce.depto,
                    ce.status_contato
                FROM contatos_empresa ce
                INNER JOIN pesquisa_empresa pe ON pe.id_empresa_fk = ce.id_empresa
                INNER JOIN pesquisas p ON p.id = pe.id_pesquisa_fk
                WHERE p.id_projeto_fk = ? AND p.id_questionario_template_fk = ?
                ORDER BY ce.id_empresa, ce.nome
            ");
            $stmt_cont->bind_param('ii', $id_projeto, $id_questionario);
            $stmt_cont->execute();
            $res_cont = $stmt_cont->get_result();
            $linhas_contatos = [];
            while ($r = $res_cont->fetch_assoc()) {
                $linhas_contatos[] = [
                    $r['idcontatos_empresa'],
                    $r['id_empresa'],
                    $r['nome'],
                    $r['sobrenome'],
                    $r['cargo'],
                    $r['email'],
                    $r['ddd'],
                    $r['tel'],
                    $r['celular'],
                    $r['depto'],
                    $r['status_contato']
                ];
            }
            $csv_contatos = csv_string_de_resultado(
                ['ID_CONTATO', 'ID_EMPRESA', 'NOME', 'SOBRENOME', 'CARGO', 'EMAIL', 'DDD', 'TELEFONE', 'CELULAR', 'DEPARTAMENTO', 'STATUS_CONTATO'],
                $linhas_contatos
            );

            // CSV 3: Respostas das perguntas
            $stmt_resp = $conn->prepare("
                SELECT
                    pr.id AS id_resposta,
                    pe.id AS id_pesquisa_empresa,
                    pe.id_empresa_fk AS id_empresa,
                    qtp.id AS id_pergunta,
                    qtp.numero AS numero_pergunta,
                    qtp.pergunta,
                    qtp.tipo_resposta,
                    pr.resposta
                FROM pesquisa_respostas pr
                INNER JOIN pesquisa_empresa pe ON pe.id = pr.id_pesquisa_empresa_fk
                INNER JOIN pesquisas p ON p.id = pe.id_pesquisa_fk
                INNER JOIN questionario_template_perguntas qtp ON qtp.id = pr.id_pergunta_fk
                WHERE p.id_projeto_fk = ? AND p.id_questionario_template_fk = ?
                ORDER BY pe.id, qtp.ordem, qtp.id
            ");
            $stmt_resp->bind_param('ii', $id_projeto, $id_questionario);
            $stmt_resp->execute();
            $res_resp = $stmt_resp->get_result();
            $linhas_respostas = [];
            while ($r = $res_resp->fetch_assoc()) {
                $linhas_respostas[] = [
                    $r['id_resposta'],
                    $r['id_pesquisa_empresa'],
                    $r['id_empresa'],
                    $r['id_pergunta'],
                    $r['numero_pergunta'],
                    $r['pergunta'],
                    $r['tipo_resposta'],
                    preg_replace("/\r\n|\r|\n/", ' ', (string)$r['resposta'])
                ];
            }
            $csv_respostas = csv_string_de_resultado(
                ['ID_RESPOSTA', 'ID_PESQUISA_EMPRESA', 'ID_EMPRESA', 'ID_PERGUNTA', 'NUMERO_PERGUNTA', 'PERGUNTA', 'TIPO_RESPOSTA', 'RESPOSTA'],
                $linhas_respostas
            );

            $arquivo_empresas = $base_nome . '_empresas_' . $data_nome . '.csv';
            $arquivo_contatos = $base_nome . '_contatos_' . $data_nome . '.csv';
            $arquivo_respostas = $base_nome . '_respostas_' . $data_nome . '.csv';
            $arquivo_zip = $base_nome . '_' . $data_nome . '.zip';

            if (class_exists('ZipArchive')) {
                $tmp_zip = tempnam(sys_get_temp_dir(), 'exp_csv_');
                $zip = new ZipArchive();
                if ($zip->open($tmp_zip, ZipArchive::OVERWRITE) === true) {
                    $zip->addFromString($arquivo_empresas, $csv_empresas);
                    $zip->addFromString($arquivo_contatos, $csv_contatos);
                    $zip->addFromString($arquivo_respostas, $csv_respostas);
                    $zip->close();

                    registrar_log_interacao(
                        $conn,
                        'EXPORTACAO_CSV_QUESTIONARIO',
                        'Exportacao CSV concluida | Projeto: ' . $projeto_nome . ' | Questionario: ' . $questionario_nome,
                        ['modulo' => 'exportar_csv.php']
                    );

                    header('Content-Type: application/zip');
                    header('Content-Disposition: attachment; filename="' . $arquivo_zip . '"');
                    header('Content-Length: ' . filesize($tmp_zip));
                    readfile($tmp_zip);
                    @unlink($tmp_zip);
                    $conn->close();
                    exit;
                } else {
                    $erro = 'Não foi possível gerar o arquivo ZIP de exportação.';
                }
            } else {
                $erro = 'A extensão ZipArchive não está habilitada no servidor.';
            }
        }
    }
}
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Exportação CSV</title>
    <style>
        body { font-family: Arial, sans-serif; background: #f4f6f9; margin: 0; padding: 20px; }
        .container { max-width: 760px; margin: 0 auto; background: #fff; border-radius: 8px; padding: 24px; box-shadow: 0 2px 10px rgba(0,0,0,.08); }
        h1 { margin-top: 0; color: #0f3b87; }
        .info { color: #556575; margin-bottom: 16px; }
        .form-group { margin-bottom: 14px; }
        label { display: block; font-weight: bold; margin-bottom: 6px; color: #334e68; }
        select { width: 100%; padding: 10px; border: 1px solid #ccd6e0; border-radius: 6px; }
        .btn-row { margin-top: 16px; display: flex; gap: 10px; flex-wrap: wrap; }
        .btn { display: inline-block; text-decoration: none; border: none; border-radius: 6px; padding: 10px 14px; cursor: pointer; font-weight: bold; }
        .btn-primary { background: #0f3b87; color: #fff; }
        .btn-secondary { background: #e9eef5; color: #243b53; }
        .erro { background: #fdecea; color: #9c1c1c; border: 1px solid #f8c9c9; border-radius: 6px; padding: 10px; margin-bottom: 14px; }
    </style>
</head>
<body>
    <div class="container">
        <h1>Exportar CSV por Projeto e Questionário</h1>
        <div class="info">
            Selecione um projeto e um questionário para exportar os arquivos de empresas, contatos e respostas.
        </div>

        <?php if ($erro !== ''): ?>
            <div class="erro"><?= htmlspecialchars($erro) ?></div>
        <?php endif; ?>

        <form method="POST">
            <input type="hidden" name="action" value="exportar">
            <div class="form-group">
                <label for="id_projeto">Projeto</label>
                <select id="id_projeto" name="id_projeto" required>
                    <option value="">Selecione o projeto...</option>
                    <?php foreach ($projetos as $projeto): ?>
                        <option value="<?= (int)$projeto['id_projeto'] ?>">
                            <?= htmlspecialchars($projeto['nome_projeto']) ?> — <?= htmlspecialchars($projeto['nome_cliente']) ?>
                        </option>
                    <?php endforeach; ?>
                </select>
            </div>

            <div class="form-group">
                <label for="id_questionario">Questionário</label>
                <select id="id_questionario" name="id_questionario" required>
                    <option value="">Selecione um projeto primeiro...</option>
                </select>
            </div>

            <div class="btn-row">
                <button type="submit" class="btn btn-primary">Exportar CSV</button>
                <a href="principal.php" class="btn btn-secondary">Voltar</a>
            </div>
        </form>
    </div>

    <script>
        const selectProjeto = document.getElementById('id_projeto');
        const selectQuestionario = document.getElementById('id_questionario');

        async function carregarQuestionarios(idProjeto) {
            selectQuestionario.innerHTML = '<option value="">Carregando...</option>';

            if (!idProjeto) {
                selectQuestionario.innerHTML = '<option value="">Selecione um projeto primeiro...</option>';
                return;
            }

            try {
                const resp = await fetch('exportar_csv.php?action=list_questionarios&id_projeto=' + encodeURIComponent(idProjeto));
                const data = await resp.json();
                if (!data.success || !Array.isArray(data.questionarios) || data.questionarios.length === 0) {
                    selectQuestionario.innerHTML = '<option value="">Nenhum questionário disponível</option>';
                    return;
                }

                selectQuestionario.innerHTML = '<option value="">Selecione o questionário...</option>';
                data.questionarios.forEach((q) => {
                    const opt = document.createElement('option');
                    opt.value = q.id;
                    opt.textContent = q.nome;
                    selectQuestionario.appendChild(opt);
                });
            } catch (e) {
                selectQuestionario.innerHTML = '<option value="">Erro ao carregar questionários</option>';
            }
        }

        selectProjeto.addEventListener('change', function() {
            carregarQuestionarios(this.value);
        });
    </script>
</body>
</html>