<?php
// processa_cadastro_empresa.php

// 1. Iniciar buffer
ob_start();

// Configurações de Debug
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Logs
$log_directory = __DIR__ . '/temp_logs';
if (!is_dir($log_directory)) {
    if (!mkdir($log_directory, 0755, true)) {
        error_log("ALERTA CRÍTICO: Não foi possível criar o diretório de logs: {$log_directory}");
    }
}
$log_file_path = $log_directory . '/processa_cadastro_empresa.log';
ini_set('log_errors', 1);
ini_set('error_log', $log_file_path);

error_log("--- [INÍCIO] Cadastro de Empresa ---");

set_time_limit(300);

// 2. Iniciar Sessão
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

require_once 'conexao.php'; 
require_once 'env.php';     
require_once __DIR__ . '/include/email_cadastro_empresa.php';

// === CORREÇÃO FUNDAMENTAL AQUI ===
function redirecionar($url) {
    // 1. Força o PHP a escrever os dados da sessão no disco AGORA
    session_write_close();
    
    // 2. Limpa qualquer lixo do buffer de saída
    while (ob_get_level() > 0) { ob_end_clean(); }
    
    // 3. Redireciona
    header("Location: " . $url);
    exit();
}
// =================================

// 3. Verificação do Método
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    $_SESSION['mensagem_cadastro_empresa'] = "Acesso inválido ao formulário.";
    $_SESSION['status_cadastro_empresa'] = "danger";
    redirecionar("cadastro_empresa.php");
}

// Verificação CSRF
if (!isset($_POST['csrf_token']) || !isset($_SESSION['csrf_token']) || !hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
    $_SESSION['mensagem_cadastro_empresa'] = "Sessão expirada ou inválida. Tente novamente.";
    $_SESSION['status_cadastro_empresa'] = "danger";
    redirecionar("cadastro_empresa.php");
}

// 4. Coleta de Dados
$nome_empresa       = trim($_POST['nome_empresa'] ?? '');
$contato            = trim($_POST['contato'] ?? '');
$setor_departamento = trim($_POST['setor_departamento'] ?? '');
$email              = filter_var(trim($_POST['email'] ?? ''), FILTER_SANITIZE_EMAIL);
$telefone_comercial = preg_replace('/\D/', '', trim($_POST['telefone_comercial'] ?? ''));
$celular            = preg_replace('/\D/', '', trim($_POST['celular'] ?? ''));
$cnpj_input         = preg_replace('/\D/', '', trim($_POST['cnpj'] ?? ''));
$senha_input        = $_POST['senha'] ?? '';

// Endereço
$cep_input   = preg_replace('/\D/', '', trim($_POST['cep'] ?? ''));
$rua         = trim($_POST['rua'] ?? '');
$numero      = trim($_POST['numero'] ?? '');
$complemento = trim($_POST['complemento'] ?? '');
$bairro      = trim($_POST['bairro'] ?? '');
$cidade      = trim($_POST['cidade'] ?? '');
$estado      = trim($_POST['estado'] ?? '');

// 5. Validações
$erros_validacao = [];

if (empty($nome_empresa)) $erros_validacao[] = "Nome da empresa é obrigatório.";
if (empty($contato)) $erros_validacao[] = "Nome do contato é obrigatório.";

// Validação Email
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $erros_validacao[] = "Formato de e-mail inválido.";
} elseif ($pdo) {
    try {
        $tabelas = ['Administradores', 'Empresas', 'Candidatos'];
        foreach ($tabelas as $tabela) {
            $stmt = $pdo->prepare("SELECT id FROM $tabela WHERE login = :email LIMIT 1");
            $stmt->execute([':email' => $email]);
            if ($stmt->fetch()) {
                $erros_validacao[] = "Este e-mail já está cadastrado ($tabela).";
                break; 
            }
        }
    } catch (PDOException $e) {
        error_log("ERRO DB: " . $e->getMessage());
        $erros_validacao[] = "Erro ao verificar e-mail.";
    }
}

// Validações diversas
if (strlen($telefone_comercial) < 10) $erros_validacao[] = "Telefone comercial inválido.";
if (strlen($cep_input) !== 8) $erros_validacao[] = "CEP inválido.";
if (empty($rua)) $erros_validacao[] = "Endereço incompleto.";

// Validação CNPJ
function validar_cnpj_clean($cnpj) {
    $cnpj = preg_replace('/[^0-9]/', '', (string)$cnpj);
    if (strlen($cnpj) != 14 || preg_match('/(\d)\1{13}/', $cnpj)) return false;
    for ($t = 12; $t < 14; $t++) {
        for ($d = 0, $m = ($t == 12 ? 5 : 6), $i = 0; $i < $t; $m = ($m == 2 ? 9 : $m - 1), $i++) {
            $d += $cnpj[$i] * $m;
        }
        if ($cnpj[$i] != (($d % 11) < 2 ? 0 : 11 - ($d % 11))) return false;
    }
    return true;
}
if (!validar_cnpj_clean($cnpj_input)) $erros_validacao[] = "CNPJ inválido.";

if (strlen($senha_input) < 6) $erros_validacao[] = "Senha muito curta.";
$senha_hash = password_hash($senha_input, PASSWORD_BCRYPT);

// 6. Upload
$logotipo_path_db = null;
$upload_dir_base = rtrim(($_ENV['UPLOAD_DIR_LOGOS'] ?? 'uploads/logo'), '/');

if (isset($_FILES['logotipo']) && $_FILES['logotipo']['error'] === UPLOAD_ERR_OK) {
    $full_upload_path = rtrim($_SERVER['DOCUMENT_ROOT'], '/') . '/' . $upload_dir_base;
    if (!is_dir($full_upload_path)) mkdir($full_upload_path, 0755, true);

    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mime = finfo_file($finfo, $_FILES['logotipo']['tmp_name']);
    finfo_close($finfo);

    $allowed = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];
    if (in_array($mime, $allowed)) {
        $ext = pathinfo($_FILES['logotipo']['name'], PATHINFO_EXTENSION);
        $novo_nome = "logo_" . uniqid() . "." . $ext;
        if (move_uploaded_file($_FILES['logotipo']['tmp_name'], $full_upload_path . '/' . $novo_nome)) {
            $logotipo_path_db = $upload_dir_base . '/' . $novo_nome;
        } else {
            $erros_validacao[] = "Erro ao salvar imagem.";
        }
    } else {
        $erros_validacao[] = "Formato de imagem inválido.";
    }
}

// 7. Retorno de Erros
if (!empty($erros_validacao)) {
    $_SESSION['mensagem_cadastro_empresa'] = "Erros:<br>" . implode("<br>", $erros_validacao);
    $_SESSION['status_cadastro_empresa'] = "danger";
    $_SESSION['form_data_empresa'] = $_POST;
    redirecionar("cadastro_empresa.php");
}

if (!$pdo) {
    $_SESSION['mensagem_cadastro_empresa'] = "Erro de conexão.";
    $_SESSION['status_cadastro_empresa'] = "danger";
    redirecionar("cadastro_empresa.php");
}

try {
    $pdo->beginTransaction();

    $sql = "INSERT INTO Empresas (
                nome_empresa, contato, setor_departamento, email,
                telefone_comercial, celular, cep, rua, numero, complemento, bairro, cidade, estado, cnpj,
                senha, logotipo, login, role, tipo_anuncio
            ) VALUES (
                :nome_empresa, :contato, :setor_departamento, :email,
                :telefone_comercial, :celular, :cep, :rua, :numero, :complemento, :bairro, :cidade, :estado, :cnpj,
                :senha, :logotipo, :login, 'Empresas', :tipo_anuncio
            )";

    $stmt = $pdo->prepare($sql);
    $stmt->execute([
        ':nome_empresa' => $nome_empresa,
        ':contato' => $contato,
        ':setor_departamento' => $setor_departamento,
        ':email' => $email,
        ':telefone_comercial' => $telefone_comercial,
        ':celular' => $celular,
        ':cep' => $cep_input,
        ':rua' => $rua,
        ':numero' => $numero,
        ':complemento' => empty($complemento) ? null : $complemento,
        ':bairro' => $bairro,
        ':cidade' => $cidade,
        ':estado' => $estado,
        ':cnpj' => $cnpj_input,
        ':senha' => $senha_hash,
        ':logotipo' => $logotipo_path_db,
        ':login' => $email,
        ':tipo_anuncio' => $_ENV['TIPO_ANUNCIO_PADRAO_EMPRESA'] ?? 'gratuito'
    ]);

    $nova_empresa_id = $pdo->lastInsertId();
    $pdo->commit();

    unset($_SESSION['form_data_empresa']);
    unset($_SESSION['csrf_token']);

    // --- AUTO-LOGIN ---
    // Fazemos regenerate ANTES de enviar emails para garantir a sessão segura
    session_regenerate_id(true); 
    $_SESSION['usuario_logado'] = true;
    $_SESSION['id'] = $nova_empresa_id;
    $_SESSION['usuario_nome'] = $nome_empresa;
    $_SESSION['login'] = $email;
    $_SESSION['role'] = 'Empresas';

    // 9. Emails
    $email_sucesso = true;
    $msg_email_erro = "";
    $site_url = rtrim($_ENV['SITE_URL'] ?? 'http://localhost', '/');

    if (function_exists('enviarEmail')) {
        $assunto = "Bem-vindo(a) à Selflix Vagas!";
        $corpo = "<p>Olá <strong>$nome_empresa</strong>,<br>Cadastro realizado!</p>";
        
        if (!enviarEmail($email, $nome_empresa, $assunto, $corpo)) {
            $email_sucesso = false;
            $msg_email_erro = "Erro ao enviar e-mail de boas-vindas.";
        }
        
        // Admin mail...
        $email_admin = $_ENV['MAIL_ADMIN'] ?? null;
        if ($email_admin) {
            enviarEmail($email_admin, 'Admin', "Novo Cadastro", "Empresa: $nome_empresa");
        }
    } else {
        $email_sucesso = false;
        $msg_email_erro = "Serviço de email indisponível.";
    }

    // 10. Feedback
    if ($email_sucesso) {
        $_SESSION['status_cadastro_empresa'] = 'success';
        $_SESSION['mensagem_cadastro_empresa'] = "Cadastro realizado com sucesso! E-mail enviado.";
    } else {
        $_SESSION['status_cadastro_empresa'] = 'warning';
        $_SESSION['mensagem_cadastro_empresa'] = "Cadastro realizado! <br>Aviso: " . $msg_email_erro;
    }

    // A mágica acontece aqui dentro:
    redirecionar("cadastro_empresa.php");

} catch (PDOException $e) {
    if ($pdo->inTransaction()) $pdo->rollBack();
    error_log("ERRO PDO: " . $e->getMessage());
    $_SESSION['mensagem_cadastro_empresa'] = "Erro no banco de dados.";
    $_SESSION['status_cadastro_empresa'] = "danger";
    redirecionar("cadastro_empresa.php");
} catch (Exception $e) {
    if ($pdo->inTransaction()) $pdo->rollBack();
    $_SESSION['mensagem_cadastro_empresa'] = "Erro inesperado.";
    $_SESSION['status_cadastro_empresa'] = "danger";
    redirecionar("cadastro_empresa.php");
}
?>