<?php
// gerar-csv-candidatos.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 os filtros de busca enviados pela URL
$search_email = $_GET['search_email'] ?? '';
$data_inicio  = $_GET['data_inicio'] ?? '';
$data_fim     = $_GET['data_fim'] ?? '';
$tipo_vaga    = $_GET['tipo_vaga'] ?? '';
$segmento     = $_GET['segmento'] ?? '';

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

try {
    $where_clauses = [];
    $params = [];

    // Aplica os mesmos filtros que o administrador usou na tela
    if (!empty($search_email)) {
        $where_clauses[] = "c.email LIKE :search_email";
        $params[':search_email'] = '%' . $search_email . '%';
    }
    if (!empty($data_inicio)) {
        $where_clauses[] = "c.data_cadastro >= :data_inicio";
        $params[':data_inicio'] = $data_inicio;
    }
    if (!empty($data_fim)) {
        $where_clauses[] = "c.data_cadastro <= :data_fim";
        $params[':data_fim'] = $data_fim . ' 23:59:59';
    }
    if (!empty($tipo_vaga)) {
        $where_clauses[] = "c.tipo_vaga = :tipo_vaga";
        $params[':tipo_vaga'] = $tipo_vaga;
    }
    if (!empty($segmento)) {
        $where_clauses[] = "c.segmento = :segmento";
        $params[':segmento'] = $segmento;
    }

    $where_sql = count($where_clauses) > 0 ? " WHERE " . implode(" AND ", $where_clauses) : "";

    // 3. Monta a consulta com o JOIN do currículo
    $sql = "SELECT c.id, c.nome, c.email, c.celular, c.cidade, c.estado, c.salario_pretendido, 
                   c.tipo_vaga, c.modelo_contratacao, c.pcd, c.segmento, c.data_cadastro, 
                   cc.caminho_arquivo AS curriculo 
            FROM Candidatos c 
            LEFT JOIN CandidatoCurriculos cc ON c.id = cc.candidato_id 
            " . $where_sql . " 
            ORDER BY c.nome ASC";

    $stmt = $pdo->prepare($sql);
    foreach ($params as $key => $val) {
        $stmt->bindValue($key, $val);
    }
    $stmt->execute();
    $candidatos = $stmt->fetchAll(PDO::FETCH_ASSOC);

    if (empty($candidatos)) {
        echo "<script>alert('Nenhum candidato encontrado com estes filtros para exportar.'); window.history.back();</script>";
        exit;
    }

    // 4. Configuração dos Cabeçalhos do Arquivo CSV
    $filename = "candidatos_exportados_" . 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 acentos no Excel)
    fprintf($output, chr(0xEF).chr(0xBB).chr(0xBF));

    // 5. Escreve a primeira linha (Cabeçalho)
    fputcsv($output, [
        'ID', 
        'Nome', 
        'E-mail', 
        'Celular', 
        'Cidade', 
        'Estado', 
        'Segmento',
        'Salário Pretendido', 
        'Tipo de Vaga', 
        'Contratação', 
        'PCD', 
        'Data de Cadastro',
        'Link do Currículo'
    ], ';');

    // 6. Escreve os dados linha a linha
    foreach ($candidatos as $cand) {
        $data_cadastro = !empty($cand['data_cadastro']) ? date('d/m/Y H:i', strtotime($cand['data_cadastro'])) : 'N/A';
        
        $salario = 'Não informado';
        if (!empty($cand['salario_pretendido']) && is_numeric($cand['salario_pretendido'])) {
            $salario = 'R$ ' . number_format($cand['salario_pretendido'], 2, ',', '.');
        }

        // Montar o link completo do currículo se existir
        $link_cv = 'Não enviado';
        if (!empty($cand['curriculo'])) {
            $link_cv = $site_url . '/' . ltrim($cand['curriculo'], '/');
        }

        fputcsv($output, [
            $cand['id'],
            $cand['nome'],
            $cand['email'],
            $cand['celular'],
            $cand['cidade'],
            $cand['estado'],
            $cand['segmento'] ?? 'N/A',
            $salario,
            $cand['tipo_vaga'] ?? 'N/A',
            $cand['modelo_contratacao'] ?? 'N/A',
            $cand['pcd'] ?? 'Não',
            $data_cadastro,
            $link_cv
        ], ';');
    }

    fclose($output);
    exit;

} catch (PDOException $e) {
    error_log("Erro ao gerar CSV de candidatos: " . $e->getMessage());
    die("Erro interno ao processar a exportação do banco de dados.");
}
?>