<?php
// processar_questionario.php
session_start();
error_log("=== PROCESSAR_QUESTIONARIO INICIADO ===");
error_log("POST: " . print_r($_POST, true));

// Verificar CSRF token
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    die("Token de segurança inválido.");
}

// Verificar se usuário está logado
if (!isset($_SESSION['logado']) || $_SESSION['logado'] !== true) {
    die("Usuário não autenticado.");
}

// Receber dados do formulário
$cliente_id = $_POST['cliente_id'] ?? null;
$etapa_id = $_POST['etapa_id'] ?? null;
$questionario_id = $_POST['questionario_id'] ?? null;
$funil_id = $_POST['funil_id'] ?? null;
$tenant_id = $_POST['tenant_id'] ?? null;
$respostas = $_POST['resposta'] ?? [];

error_log("📦 Dados recebidos:");
error_log("Cliente ID: $cliente_id");
error_log("Questionário ID: $questionario_id");
error_log("Tenant ID: $tenant_id");
error_log("Respostas: " . print_r($respostas, true));

if (empty($cliente_id) || empty($questionario_id) || empty($respostas)) {
    die("Dados incompletos para processar o questionário.");
}

require_once 'conexao.php';

// VERIFICAR SE O ARQUIVO DE FLUXOS EXISTE
$arquivo_fluxos = 'verificador_fluxos_automatizados.php';
if (file_exists($arquivo_fluxos)) {
    require_once $arquivo_fluxos;
    error_log("✅ Arquivo de fluxos carregado: $arquivo_fluxos");
} else {
    error_log("❌ Arquivo de fluxos não encontrado: $arquivo_fluxos");
    // Criar função dummy para não quebrar o código
    if (!function_exists('criarAtividadesPorFluxo')) {
        function criarAtividadesPorFluxo($conn, $evento_tipo, $cliente_id, $dados_adicionais) {
            error_log("⚠️ Função dummy criada - fluxos não executados");
            return 0;
        }
    }
}

try {
    // Iniciar transação
    $conn->begin_transaction();
    
    error_log("📝 Processando questionário para cliente: $cliente_id, questionário: $questionario_id");
    
    // 1. Calcular pontuação total - USANDO TABELAS CORRETAS
    $pontuacao_total = 0;
    $respostas_processadas = [];
    
    foreach ($respostas as $pergunta_id => $resposta) {
        if (is_array($resposta)) {
            // Resposta múltipla (checkbox)
            foreach ($resposta as $opcao_id) {
                $stmt_pontuacao = $conn->prepare("SELECT pontuacao FROM opcoes_resposta WHERE id = ?");
                $stmt_pontuacao->bind_param("i", $opcao_id);
                $stmt_pontuacao->execute();
                $result_pontuacao = $stmt_pontuacao->get_result();
                
                if ($row = $result_pontuacao->fetch_assoc()) {
                    $pontuacao = $row['pontuacao'] ?? 0;
                    $pontuacao_total += $pontuacao;
                    $respostas_processadas[] = [
                        'pergunta_id' => $pergunta_id,
                        'opcao_id' => $opcao_id,
                        'pontuacao' => $pontuacao
                    ];
                    error_log("➕ Pontuação: +{$pontuacao} pts (Opção: $opcao_id)");
                } else {
                    error_log("⚠️ Opção não encontrada: $opcao_id");
                }
                $stmt_pontuacao->close();
            }
        } else {
            // Resposta única (radio/texto) - verificar se é ID de opção ou texto livre
            if (is_numeric($resposta)) {
                // É um ID de opção
                $stmt_pontuacao = $conn->prepare("SELECT pontuacao FROM opcoes_resposta WHERE id = ?");
                $stmt_pontuacao->bind_param("i", $resposta);
                $stmt_pontuacao->execute();
                $result_pontuacao = $stmt_pontuacao->get_result();
                
                if ($row = $result_pontuacao->fetch_assoc()) {
                    $pontuacao = $row['pontuacao'] ?? 0;
                    $pontuacao_total += $pontuacao;
                    $respostas_processadas[] = [
                        'pergunta_id' => $pergunta_id,
                        'opcao_id' => $resposta,
                        'pontuacao' => $pontuacao
                    ];
                    error_log("➕ Pontuação: +{$pontuacao} pts (Opção: $resposta)");
                } else {
                    error_log("⚠️ Opção não encontrada: $resposta");
                }
                $stmt_pontuacao->close();
            } else {
                // É uma resposta de texto - sem pontuação
                $respostas_processadas[] = [
                    'pergunta_id' => $pergunta_id,
                    'opcao_id' => null,
                    'resposta_texto' => $resposta,
                    'pontuacao' => 0
                ];
                error_log("📝 Resposta de texto: $resposta");
            }
        }
    }
    
    error_log("📊 Pontuação total calculada: $pontuacao_total pontos");
    
    // 2. Salvar resposta do questionário
    $sql_resposta = "INSERT INTO respostas_formulario 
                    (formulario_id, cliente_id, data_envio, data_resposta, utilizado, identificador, email_cliente) 
                    VALUES (?, ?, NOW(), NOW(), 0, ?, ?)";
    
    $stmt_resposta = $conn->prepare($sql_resposta);
    $identificador = uniqid('questionario_');
    $email_cliente = '';
    
    // Buscar email do cliente
    $stmt_email = $conn->prepare("SELECT Email FROM clientes WHERE id = ?");
    $stmt_email->bind_param("s", $cliente_id);
    $stmt_email->execute();
    $result_email = $stmt_email->get_result();
    if ($cliente_email = $result_email->fetch_assoc()) {
        $email_cliente = $cliente_email['Email'];
    }
    $stmt_email->close();
    
    $stmt_resposta->bind_param("iiss", $questionario_id, $cliente_id, $identificador, $email_cliente);
    $stmt_resposta->execute();
    $resposta_formulario_id = $conn->insert_id;
    $stmt_resposta->close();
    
    error_log("✅ Resposta do questionário salva com ID: $resposta_formulario_id");
    
    // 3. Salvar respostas individuais
    foreach ($respostas_processadas as $resposta) {
        if (isset($resposta['resposta_texto'])) {
            // Resposta de texto
            $sql_detalhe = "INSERT INTO respostas 
                           (resposta_formulario_id, pergunta_id, resposta_texto) 
                           VALUES (?, ?, ?)";
            $stmt_detalhe = $conn->prepare($sql_detalhe);
            $stmt_detalhe->bind_param("iis", $resposta_formulario_id, $resposta['pergunta_id'], $resposta['resposta_texto']);
        } else {
            // Resposta com opção
            $sql_detalhe = "INSERT INTO respostas 
                           (resposta_formulario_id, pergunta_id, opcao_id, resposta_texto) 
                           VALUES (?, ?, ?, '')";
            $stmt_detalhe = $conn->prepare($sql_detalhe);
            $stmt_detalhe->bind_param("iii", $resposta_formulario_id, $resposta['pergunta_id'], $resposta['opcao_id']);
        }
        
        $stmt_detalhe->execute();
        $stmt_detalhe->close();
    }
    
    error_log("✅ " . count($respostas_processadas) . " detalhes das respostas salvos");
    
    // 4. Atualizar etapa do cliente (se necessário)
    if ($etapa_id) {
        $sql_atualizar_etapa = "UPDATE clientes SET etapa_funil_id = ? WHERE id = ?";
        $stmt_etapa = $conn->prepare($sql_atualizar_etapa);
        $stmt_etapa->bind_param("ii", $etapa_id, $cliente_id);
        $stmt_etapa->execute();
        $stmt_etapa->close();
        error_log("✅ Etapa do cliente atualizada para: $etapa_id");
    }
    
    // 5. DISPARAR FLUXOS AUTOMATIZADOS
    error_log("🚀 DISPARANDO FLUXOS AUTOMATIZADOS PARA QUESTIONÁRIO");
    
    $dados_adicionais = [
        'tenant_id' => $tenant_id,
        'questionario_id' => $questionario_id,
        'pontuacao' => $pontuacao_total,
        'etapa_funil_id' => $etapa_id,
        'data_resposta' => date('Y-m-d H:i:s')
    ];
    
    error_log("📋 Dados para fluxos: " . json_encode($dados_adicionais));
    
    // Determinar tipo de evento baseado na pontuação
    $evento_tipo = 'formulario_enviado';
    
    // Verificar se há nota mínima e se foi atingida
    $stmt_nota_minima = $conn->prepare("SELECT nota_minima FROM formularios WHERE id = ?");
    $stmt_nota_minima->bind_param("i", $questionario_id);
    $stmt_nota_minima->execute();
    $result_nota_minima = $stmt_nota_minima->get_result();
    
    if ($nota_minima_row = $result_nota_minima->fetch_assoc()) {
        $nota_minima = $nota_minima_row['nota_minima'];
        if ($nota_minima && $pontuacao_total >= $nota_minima) {
            $evento_tipo = 'cliente_qualificado';
            error_log("🎯 Cliente QUALIFICADO! Pontuação: $pontuacao_total >= $nota_minima");
        } else {
            error_log("📝 Cliente respondeu, mas NÃO qualificado. Pontuação: $pontuacao_total < $nota_minima");
        }
    } else {
        error_log("📝 Nenhuma nota mínima configurada para este questionário");
    }
    $stmt_nota_minima->close();
    
    error_log("🎯 Tipo de evento determinado: $evento_tipo");
    
    // 6. Executar fluxos automatizados
    $atividades_criadas = criarAtividadesPorFluxo($conn, $evento_tipo, $cliente_id, $dados_adicionais);
    error_log("✅ Fluxos executados. Atividades criadas: $atividades_criadas");
    
    // 7. Commit da transação
    $conn->commit();
    
    // 8. Mensagem de sucesso
    $mensagem_sucesso = "✅ Questionário respondido com sucesso!";
    if ($pontuacao_total > 0) {
        $mensagem_sucesso .= "\\n📊 Pontuação: $pontuacao_total pontos.";
    }
    if ($atividades_criadas > 0) {
        $mensagem_sucesso .= "\\n🤖 $atividades_criadas atividade(s) criada(s) automaticamente.";
    }
    
    error_log("🎉 PROCESSAMENTO CONCLUÍDO: $mensagem_sucesso");
    
    // Retornar sucesso
    echo "<script>
        alert('$mensagem_sucesso');
        if (window.opener && !window.opener.closed) {
            window.opener.location.reload();
        }
        window.close();
    </script>";
    
} catch (Exception $e) {
    // Rollback em caso de erro
    if (isset($conn)) {
        $conn->rollback();
    }
    error_log("❌ ERRO ao processar questionário: " . $e->getMessage());
    
    $mensagem_erro = addslashes("Erro ao processar questionário: " . $e->getMessage());
    echo "<script>
        alert('$mensagem_erro');
        window.history.back();
    </script>";
} finally {
    if (isset($conn)) {
        $conn->close();
    }
}
?>