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

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

require_once 'conexao.php';

// 1. Verificação de Segurança (Apenas Admins podem exportar)
if (($_SESSION['role'] ?? '') !== 'Administradores' && ($_SESSION['role'] ?? '') !== 'Administrador') {
    die("Acesso negado. Você não tem permissão para realizar esta ação.");
}

// 2. Captura o termo de busca para exportar a lista filtrada (se houver)
$termo_busca = $_GET['q'] ?? '';

// Definir domínio base para gerar link completo da vaga
$protocolo = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http";
$host = $_SERVER['HTTP_HOST'];
$site_url = $protocolo . "://" . $host;

try {
    // 3. Monta a consulta SQL usando SELECT * para evitar erros de colunas inexistentes
    $sql = "SELECT * FROM Empresas";
    
    if (!empty($termo_busca)) {
        $sql .= " WHERE nome_empresa LIKE :q OR email LIKE :q2 OR cnpj LIKE :q3";
    }
    
    $sql .= " ORDER BY nome_empresa ASC";

    $stmt = $pdo->prepare($sql);
    
    if (!empty($termo_busca)) {
        $stmt->bindValue(':q', "%$termo_busca%");
        $stmt->bindValue(':q2', "%$termo_busca%");
        $stmt->bindValue(':q3', "%$termo_busca%");
    }
    
    $stmt->execute();
    $empresas = $stmt->fetchAll(PDO::FETCH_ASSOC);

    if (empty($empresas)) {
        echo "<script>alert('Nenhuma empresa encontrada para exportar.'); window.history.back();</script>";
        exit;
    }

    // 4. Configuração dos Cabeçalhos para forçar o download do CSV
    $filename = "relatorio_empresas_vagas_" . date('Y-m-d_H-i') . ".csv";
    
    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename="' . $filename . '"');

    $output = fopen('php://output', 'w');

    // Força o formato UTF-8 com BOM para o Excel ler acentos
    fprintf($output, chr(0xEF).chr(0xBB).chr(0xBF));

    // 5. Escreve a primeira linha (Cabeçalho)
    fputcsv($output, [
        'ID Empresa', 
        'Razão Social', 
        'CNPJ', 
        'E-mail da Empresa', 
        'Responsável', 
        'Telefone/Celular', 
        'Cidade', 
        'Estado', 
        'Plano', 
        'Data de Cadastro da Empresa',
        '---', 
        'Título da Vaga',
        'Tipo de Vaga',
        'Data de Publicação',
        'Total de Candidaturas',
        'Link da Vaga'
    ], ';');

    // 6. Escreve os dados linha a linha de forma protegida
    foreach ($empresas as $emp) {
        
        // Verifica se a coluna existe antes de a usar
        $data_cadastro_emp = !empty($emp['data_cadastro']) ? date('d/m/Y H:i', strtotime($emp['data_cadastro'])) : 'N/A';
        $plano = strtoupper($emp['tipo_plano'] ?? 'GRATUITO');
        $estado = $emp['estado'] ?? 'N/A';

        // Busca Vagas Gratuitas usando SELECT *
        $stmt_gratuitas = $pdo->prepare("SELECT * FROM anuncio_gratuito WHERE empresa_id = ?");
        $stmt_gratuitas->execute([$emp['id']]);
        $vagas_gratuitas = $stmt_gratuitas->fetchAll(PDO::FETCH_ASSOC);

        // Busca Vagas Pagas usando SELECT *
        $stmt_pagas = $pdo->prepare("SELECT * FROM anuncio_pago WHERE empresa_id = ?");
        $stmt_pagas->execute([$emp['id']]);
        $vagas_pagas = $stmt_pagas->fetchAll(PDO::FETCH_ASSOC);

        // Junta as vagas
        $todas_vagas = [];
        foreach ($vagas_gratuitas as $vg) {
            $vg['tipo_export'] = 'Gratuito';
            $todas_vagas[] = $vg;
        }
        foreach ($vagas_pagas as $vp) {
            $vp['tipo_export'] = 'Pago (Select)';
            $todas_vagas[] = $vp;
        }

        // Se não tiver vagas, exporta só a empresa
        if (empty($todas_vagas)) {
            fputcsv($output, [
                $emp['id'], $emp['nome_empresa'] ?? 'N/A', $emp['cnpj'] ?? 'N/A', $emp['email'] ?? 'N/A', 
                $emp['contato'] ?? 'N/A', $emp['celular'] ?? 'N/A', $emp['cidade'] ?? 'N/A', $estado, 
                $plano, $data_cadastro_emp, 
                '|', 
                'Nenhuma vaga', 'N/A', 'N/A', '0', 'N/A'
            ], ';');
            continue;
        }

        // Se tiver vagas, processa cada uma
        foreach ($todas_vagas as $vaga) {
            // Lida com possíveis nomes diferentes para a data
            $data_vaga_raw = $vaga['data_cadastro'] ?? $vaga['data_criacao'] ?? $vaga['created_at'] ?? '';
            $data_pub = !empty($data_vaga_raw) ? date('d/m/Y H:i', strtotime($data_vaga_raw)) : 'N/A';
            
            $titulo = $vaga['titulo_vaga'] ?? $vaga['titulo'] ?? 'Sem Título';
            $slug_or_id = $vaga['slug'] ?? $vaga['id'] ?? '';
            
            // Contagem de candidaturas
            $tipo_bd = ($vaga['tipo_export'] === 'Gratuito') ? 'gratuito' : 'pago';
            $total_cand = 0;
            try {
                $stmt_cand = $pdo->prepare("SELECT COUNT(*) FROM candidaturas WHERE vaga_id = ? AND tipo_anuncio = ?");
                $stmt_cand->execute([$vaga['id'], $tipo_bd]);
                $total_cand = $stmt_cand->fetchColumn();
            } catch(Exception $e) { 
                $total_cand = 'Erro na contagem'; 
            }

            // Montar Link (Usa slug se existir, senão usa ID)
            $param_link = isset($vaga['slug']) ? "slug=" . urlencode($slug_or_id) : "id=" . urlencode($slug_or_id);
            $link_vaga = $site_url . "/vaga.php?" . $param_link;

            fputcsv($output, [
                $emp['id'], 
                $emp['nome_empresa'] ?? 'N/A', 
                $emp['cnpj'] ?? 'N/A', 
                $emp['email'] ?? 'N/A', 
                $emp['contato'] ?? 'N/A', 
                $emp['celular'] ?? 'N/A', 
                $emp['cidade'] ?? 'N/A', 
                $estado, 
                $plano, 
                $data_cadastro_emp, 
                '|', 
                $titulo,
                $vaga['tipo_export'],
                $data_pub,
                $total_cand,
                $link_vaga
            ], ';');
        }
    }

    fclose($output);
    exit;

} catch (PDOException $e) {
    error_log("Erro ao gerar CSV: " . $e->getMessage());
    // Adicionei o $e->getMessage() na tela apenas para debug caso volte a falhar
    die("Erro interno ao processar a exportação do banco de dados. Detalhe: " . $e->getMessage());
}
?>