<?php
// gerar-csv-empresas.php

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
require_once 'conexao.php';
require_once 'env.php';

// Verifica se o usuário tem permissão de administrador
if (($_SESSION['role'] ?? '') !== 'Administradores' && ($_SESSION['role'] ?? '') !== 'Administrador') {
    die("Acesso negado.");
}

if (!isset($pdo) || !$pdo) {
    error_log("Falha ao gerar CSV de empresas: conexão PDO não disponível.");
    die("Erro crítico de sistema (DB). Não é possível gerar o CSV.");
}

try {
    // Recebe o filtro de busca da URL
    $termo_busca = $_GET['q'] ?? '';

    // Constrói a consulta SQL selecionando todas as colunas
    $sql = "SELECT * FROM Empresas";
    $params = [];

    if (!empty($termo_busca)) {
        $sql .= " WHERE nome_empresa LIKE :q OR email LIKE :q2 OR cnpj LIKE :q3";
        $params[':q'] = "%$termo_busca%";
        $params[':q2'] = "%$termo_busca%";
        $params[':q3'] = "%$termo_busca%";
    }

    $sql .= " ORDER BY nome_empresa ASC";

    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $empresas = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Configura os cabeçalhos para forçar o download em formato CSV
    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename="empresas_completas_' . date('Y-m-d_H-i') . '.csv"');

    // Abre o stream de saída
    $output = fopen('php://output', 'w');

    // Adiciona o BOM para o Excel ler acentuação (UTF-8) corretamente
    fprintf($output, chr(0xEF).chr(0xBB).chr(0xBF));

    if (count($empresas) > 0) {
        // Pega as chaves da primeira empresa para usar como cabeçalho dinâmico
        $cabecalhos = array_keys($empresas[0]);
        
        // Formata os cabeçalhos (Ex: nome_empresa -> Nome Empresa)
        $cabecalhos_formatados = array_map(function($coluna) {
            return ucwords(str_replace('_', ' ', $coluna));
        }, $cabecalhos);

        // Escreve o cabeçalho no arquivo, usando ponto e vírgula como separador
        fputcsv($output, $cabecalhos_formatados, ';');

        // Preenche as linhas
        foreach ($empresas as $empresa) {
            // Trata valores nulos para "N/A"
            $linha = array_map(function($valor) {
                return $valor ?? 'N/A';
            }, $empresa);
            
            fputcsv($output, $linha, ';');
        }
    } else {
        fputcsv($output, ['Nenhuma empresa encontrada com os filtros informados.'], ';');
    }

    fclose($output);
    exit();

} catch (PDOException $e) {
    error_log("Erro PDO ao gerar CSV de empresas: " . $e->getMessage());
    die("Erro ao gerar o arquivo CSV.");
}
?>