<?php
// Habilitar exibição de erros para debug
error_reporting(E_ALL);
ini_set('display_errors', 1);

session_start();

// Verifica se usuário está logado
if (!isset($_SESSION['logado']) || $_SESSION['logado'] !== true) {
    header('Location: login.php');
    exit;
}

// GERAR CSRF TOKEN se não existir
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

// Incluir arquivo de conexão
require_once 'conexao.php';

// Verificar se a conexão foi estabelecida
if ($conn->connect_error) {
    die("Erro de conexão: " . $conn->connect_error);
}

// DEBUG - Log para verificar se o arquivo está sendo chamado
error_log("=== APLICAR_QUESTIONARIO CHAMADO ===");
error_log("GET: " . print_r($_GET, true));

// Buscar dados do cliente e contexto com validação
$cliente_id = filter_var($_GET['cliente_id'] ?? null, FILTER_VALIDATE_INT);
$etapa_id = filter_var($_GET['etapa_id'] ?? null, FILTER_VALIDATE_INT);
$funil_id = filter_var($_GET['funil_id'] ?? null, FILTER_VALIDATE_INT);

// Validar parâmetros obrigatórios
if (!$cliente_id || !$etapa_id || !$funil_id) {
    die("Parâmetros obrigatórios não fornecidos ou inválidos: cliente_id, etapa_id, funil_id");
}

// Buscar tenant_id da sessão para segurança
$tenant_id = $_SESSION['tenant_id'] ?? null;
if (!$tenant_id) {
    die("Sessão inválida. Faça login novamente.");
}

// Buscar o questionário_id da etapa
$questionario_id = null;
$etapa_nome = '';
try {
    $stmt_etapa = $conn->prepare("
        SELECT ef.questionario_id, ef.nome 
        FROM etapas_funis ef 
        JOIN funis f ON ef.funil_id = f.id 
        WHERE ef.id = ? AND f.tenant_id = ?
    ");
    if (!$stmt_etapa) {
        throw new Exception("Erro ao preparar consulta da etapa: " . $conn->error);
    }
    
    $stmt_etapa->bind_param("ii", $etapa_id, $tenant_id);
    $stmt_etapa->execute();
    $result_etapa = $stmt_etapa->get_result();
    
    if ($result_etapa->num_rows > 0) {
        $etapa_data = $result_etapa->fetch_assoc();
        $questionario_id = $etapa_data['questionario_id'];
        $etapa_nome = $etapa_data['nome'];
        error_log("Questionário ID encontrado: " . $questionario_id . " para etapa: " . $etapa_nome);
    } else {
        error_log("Nenhuma etapa encontrada para ID: " . $etapa_id);
        die("Etapa não encontrada ou sem permissão de acesso");
    }
} catch (Exception $e) {
    die("Erro ao buscar etapa: " . $e->getMessage());
}

// Se não há questionário associado, redirecionar de volta
if (!$questionario_id) {
    error_log("Nenhum questionário associado à etapa. Atualizando etapa diretamente.");
    
    // Atualizar a etapa do cliente diretamente
    $stmt_update = $conn->prepare("UPDATE clientes SET etapa_funil_id = ? WHERE id = ? AND tenant_id = ?");
    $stmt_update->bind_param("iii", $etapa_id, $cliente_id, $tenant_id);
    
    if ($stmt_update->execute()) {
        echo "<script>
            alert('Cliente movido para a etapa: $etapa_nome');
            if (window.opener && !window.opener.closed) {
                window.opener.location.reload();
            }
            window.close();
        </script>";
    } else {
        echo "<script>
            alert('Erro ao mover cliente');
            window.close();
        </script>";
    }
    exit;
}

// Inicializar variáveis
$perguntas = [];
$questionario_data = [];
$cliente_data = [];

try {
    // Buscar dados do cliente com verificação de tenant
    $stmt_cliente = $conn->prepare("SELECT Nome_Cliente as nome, Email as email FROM clientes WHERE id = ? AND tenant_id = ?");
    if (!$stmt_cliente) {
        throw new Exception("Erro ao preparar consulta do cliente: " . $conn->error);
    }
    
    $stmt_cliente->bind_param("ii", $cliente_id, $tenant_id);
    $stmt_cliente->execute();
    $result_cliente = $stmt_cliente->get_result();
    $cliente_data = $result_cliente->fetch_assoc();

    if (!$cliente_data) {
        die("Cliente não encontrado ou sem permissão de acesso.");
    }

    $cliente_nome = $cliente_data['nome'];
    $cliente_email = $cliente_data['email'];

    // Buscar dados do questionário da tabela FORMULARIOS
    $stmt_questionario = $conn->prepare("SELECT * FROM formularios WHERE id = ? AND tenant_id = ?");
    if (!$stmt_questionario) {
        throw new Exception("Erro ao preparar consulta do questionário: " . $conn->error);
    }
    
    $stmt_questionario->bind_param("ii", $questionario_id, $tenant_id);
    $stmt_questionario->execute();
    $result_questionario = $stmt_questionario->get_result();
    $questionario_data = $result_questionario->fetch_assoc();

    if (!$questionario_data) {
        die("Questionário não encontrado.");
    }

    // DEBUG: Mostrar dados do questionário
    error_log("Questionário encontrado: " . print_r($questionario_data, true));

    // Busca otimizada de perguntas e condicionais
    $stmtPerguntas = $conn->prepare("
        SELECT p.id, p.texto as pergunta, p.tipo, p.obrigatoria, p.ordem, 
               p.parent_resposta_id, p.parent_pergunta_id
        FROM perguntas p
        WHERE p.formulario_id = ?
        ORDER BY p.ordem, p.id
    ");
    if (!$stmtPerguntas) throw new Exception("Prepare failed: " . $conn->error);
    
    $stmtPerguntas->bind_param("i", $questionario_id);
    if (!$stmtPerguntas->execute()) throw new Exception("Execute failed: " . $stmtPerguntas->error);
    
    $todasPerguntas = $stmtPerguntas->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmtPerguntas->close();

    // Buscar todas as opções de uma vez
    $stmtOpcoes = $conn->prepare("
        SELECT id, pergunta_id, texto, pontuacao as nota, ordem
        FROM opcoes_resposta 
        WHERE pergunta_id IN (
            SELECT id FROM perguntas WHERE formulario_id = ?
        )
        ORDER BY ordem, id
    ");
    $stmtOpcoes->bind_param("i", $questionario_id);
    $stmtOpcoes->execute();
    $todasOpcoes = $stmtOpcoes->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmtOpcoes->close();

    // Organiza as perguntas
    $perguntasPrincipais = [];
    $perguntasCondicionais = [];
    
    foreach ($todasPerguntas as $pergunta) {
        if ($pergunta['parent_resposta_id'] === null) {
            $perguntasPrincipais[] = $pergunta;
        } else {
            if (!isset($perguntasCondicionais[$pergunta['parent_resposta_id']])) {
                $perguntasCondicionais[$pergunta['parent_resposta_id']] = [];
            }
            $perguntasCondicionais[$pergunta['parent_resposta_id']][] = $pergunta;
        }
    }

    // Organiza as opções por pergunta
    $opcoesPorPergunta = [];
    foreach ($todasOpcoes as $opcao) {
        if (!isset($opcoesPorPergunta[$opcao['pergunta_id']])) {
            $opcoesPorPergunta[$opcao['pergunta_id']] = [];
        }
        $opcoesPorPergunta[$opcao['pergunta_id']][] = $opcao;
    }

    // FUNÇÃO RECURSIVA PARA ADICIONAR CONDICIONAIS
    function adicionarCondicionais(&$opcao, $perguntasCondicionais, $opcoesPorPergunta) {
        if (isset($perguntasCondicionais[$opcao['id']])) {
            $opcao['condicionais'] = [];
            
            foreach ($perguntasCondicionais[$opcao['id']] as $condicional) {
                $condicional['opcoes'] = $opcoesPorPergunta[$condicional['id']] ?? [];
                
                // Adiciona condicionais recursivamente às opções desta pergunta condicional
                foreach ($condicional['opcoes'] as &$opcaoCond) {
                    adicionarCondicionais($opcaoCond, $perguntasCondicionais, $opcoesPorPergunta);
                }
                unset($opcaoCond);
                
                $opcao['condicionais'][] = $condicional;
            }
        }
    }

    // Monta a estrutura final - APENAS PERGUNTAS PRINCIPAIS
    $perguntas = [];
    foreach ($perguntasPrincipais as $pergunta) {
        $pergunta['opcoes'] = $opcoesPorPergunta[$pergunta['id']] ?? [];
        
        // Adiciona condicionais recursivamente às opções
        foreach ($pergunta['opcoes'] as &$opcao) {
            adicionarCondicionais($opcao, $perguntasCondicionais, $opcoesPorPergunta);
        }
        unset($opcao);
        
        $perguntas[] = $pergunta;
    }

    // DEBUG: Mostrar estrutura das perguntas
    error_log("Total de perguntas principais: " . count($perguntasPrincipais));
    error_log("Total de perguntas condicionais: " . count($perguntasCondicionais));
    foreach ($perguntas as $p) {
        error_log("Pergunta {$p['id']}: '{$p['pergunta']}' - {$p['tipo']} - Obrigatória: {$p['obrigatoria']} - " . count($p['opcoes']) . " opções");
        foreach ($p['opcoes'] as $opcao) {
            if (isset($opcao['condicionais'])) {
                error_log("  Opção {$opcao['id']} tem " . count($opcao['condicionais']) . " perguntas condicionais");
            }
        }
    }

} catch (Exception $e) {
    die("Erro ao carregar questionário: " . $e->getMessage());
}

// FUNÇÃO RECURSIVA PARA RENDERIZAR PERGUNTAS
function renderizarPerguntas($perguntas, &$pergunta_numero, $nivel = 0) {
    $html = '';
    
    foreach ($perguntas as $pergunta) {
        $marginLeft = $nivel * 30;
        $borderColor = $nivel > 0 ? '#3498db' : '#dee2e6';
        $backgroundColor = $nivel > 0 ? '#f0f7ff' : '#f8f9fa';
        
        // APLICAÇÃO DA REGRA: Diferentes estilos para perguntas obrigatórias e opcionais
        $isObrigatoria = $pergunta['obrigatoria'] == 1;
        $borderLeftColor = $isObrigatoria ? '#e74c3c' : '#f39c12';
        $background = $isObrigatoria ? '#fff5f5' : '#fffaf0';
        
        // Se for condicional, adiciona classe específica e atributo data-parent-resposta
        $extraClass = $nivel > 0 ? ' pergunta-condicional' : '';
        $extraStyle = $nivel > 0 ? 'display: none;' : '';
        
        // Adiciona atributos para controle das condicionais
        $dataAttrs = '';
        if ($nivel > 0) {
            $parentId = $pergunta['parent_resposta_id'] ?? '';
            $dataAttrs = " data-parent-resposta=\"{$parentId}\"";
        }
        
        $html .= '<div class="pergunta-item' . $extraClass . '" data-pergunta-id="' . $pergunta['id'] . '" data-nivel="' . $nivel . '" data-obrigatoria="' . ($isObrigatoria ? '1' : '0') . '"' . $dataAttrs . ' style="margin-left: ' . $marginLeft . 'px; border-left: 4px solid ' . $borderLeftColor . '; background: ' . $background . ';' . $extraStyle . '">';
        
        // Numeração baseada no nível
        $numeroDisplay = '';
        if ($nivel === 0) {
            $numeroDisplay = $pergunta_numero . '. ';
        } else {
            $numeroDisplay = str_repeat($pergunta_numero . '.', $nivel + 1) . ' ';
        }
        
        $html .= '<h4 style="color: #007bff; margin-top: 0; margin-bottom: 15px;">';
        $html .= $numeroDisplay . htmlspecialchars($pergunta['pergunta']);
        
        // APLICAÇÃO DA REGRA: Indicador visual de obrigatoriedade
        if ($isObrigatoria) {
            $html .= '<span class="required" title="Obrigatória"> *</span>';
            $html .= '<span class="obrigatoria-indicator" style="color: #e74c3c; font-size: 12px; margin-left: 10px; font-weight: normal;">';
            $html .= '<i class="fas fa-exclamation-circle"></i> Obrigatória';
            $html .= '</span>';
        } else {
            $html .= '<span class="opcional-indicator" style="color: #f39c12; font-size: 12px; margin-left: 10px; font-weight: normal;">';
            $html .= '<i class="fas fa-info-circle"></i> Opcional';
            $html .= '</span>';
        }
        
        $html .= '</h4>';
        
        // Renderizar campo baseado no tipo da pergunta
        if ($pergunta['tipo'] === 'texto') {
            // Campo de texto livre
            $html .= '<input type="text" name="respostas[' . $pergunta['id'] . ']" ';
            // NÃO adiciona required aqui - será controlado via JavaScript
            $html .= ' style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px;">';
            
        } elseif ($pergunta['tipo'] === 'multipla') {
            // Múltipla escolha (checkbox)
            if (!empty($pergunta['opcoes'])) {
                $html .= '<div class="opcoes">';
                foreach ($pergunta['opcoes'] as $opcao) {
                    $html .= '<div class="opcao-container">';
                    $html .= '<label class="opcao-label">';
                    $html .= '<input type="checkbox" ';
                    $html .= 'name="respostas[' . $pergunta['id'] . '][]" ';
                    $html .= 'value="' . $opcao['id'] . '"';
                    $html .= ' data-pergunta-id="' . $pergunta['id'] . '"';
                    $html .= ' data-resposta-id="' . $opcao['id'] . '">';
                    
                    $html .= '<span class="opcao-texto">';
                    $html .= htmlspecialchars($opcao['texto']);
                    $html .= '</span>';
                    
                    if (isset($opcao['nota']) && $opcao['nota'] > 0) {
                        $html .= '<span class="pontuacao-badge">';
                        $html .= '+' . number_format($opcao['nota'], 2) . ' pts';
                        $html .= '</span>';
                    }
                    $html .= '</label>';
                    
                    // Renderizar condicionais recursivamente se existirem
                    if (!empty($opcao['condicionais'])) {
                        $sub_numero = $pergunta_numero;
                        $html .= renderizarPerguntas($opcao['condicionais'], $sub_numero, $nivel + 1);
                    }
                    
                    $html .= '</div>';
                }
                $html .= '</div>';
            } else {
                $html .= '<p style="color: #856404; font-style: italic;">';
                $html .= '<i class="fas fa-info-circle"></i> Nenhuma opção de resposta disponível';
                $html .= '</p>';
            }
            
        } elseif ($pergunta['tipo'] === 'unica') {
            // Escolha única (radio buttons)
            if (!empty($pergunta['opcoes'])) {
                $html .= '<div class="opcoes">';
                foreach ($pergunta['opcoes'] as $opcao) {
                    $html .= '<div class="opcao-container">';
                    $html .= '<label class="opcao-label">';
                    $html .= '<input type="radio" ';
                    $html .= 'name="respostas[' . $pergunta['id'] . ']" ';
                    $html .= 'value="' . $opcao['id'] . '"';
                    // NÃO adiciona required aqui - será controlado via JavaScript
                    $html .= ' data-pergunta-id="' . $pergunta['id'] . '"';
                    $html .= ' data-resposta-id="' . $opcao['id'] . '">';
                    
                    $html .= '<span class="opcao-texto">';
                    $html .= htmlspecialchars($opcao['texto']);
                    $html .= '</span>';
                    
                    if (isset($opcao['nota']) && $opcao['nota'] > 0) {
                        $html .= '<span class="pontuacao-badge">';
                        $html .= '+' . number_format($opcao['nota'], 2) . ' pts';
                        $html .= '</span>';
                    }
                    $html .= '</label>';
                    
                    // Renderizar condicionais recursivamente se existirem
                    if (!empty($opcao['condicionais'])) {
                        $sub_numero = $pergunta_numero;
                        $html .= renderizarPerguntas($opcao['condicionais'], $sub_numero, $nivel + 1);
                    }
                    
                    $html .= '</div>';
                }
                $html .= '</div>';
            } else {
                $html .= '<p style="color: #856404; font-style: italic;">';
                $html .= '<i class="fas fa-info-circle"></i> Nenhuma opção de resposta disponível';
                $html .= '</p>';
            }
        } else {
            // Tipo desconhecido
            $html .= '<p style="color: #856404; font-style: italic;">';
            $html .= '<i class="fas fa-exclamation-triangle"></i> Tipo de pergunta não suportado: ' . htmlspecialchars($pergunta['tipo']);
            $html .= '</p>';
        }
        
        $html .= '</div>';
        
        // Só incrementa o número da pergunta se for nível 0 (pergunta principal)
        if ($nivel === 0) {
            $pergunta_numero++;
        }
    }
    
    return $html;
}

// Processar envio do formulário
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // VALIDAÇÃO CSRF
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        die("Token CSRF inválido.");
    }
    
    $error_message = null;
    $success_message = null;
    
    try {
        $conn->begin_transaction();
        
        $usuario_id = $_SESSION['usuario_id'] ?? 0;
        $nota_final = 0;
        $respostas = $_POST['respostas'] ?? [];
        
        // DEBUG: Mostrar respostas recebidas
        error_log("Respostas recebidas: " . print_r($respostas, true));

        // Inserir na tabela respostas_formulario
        $sqlResposta = "INSERT INTO respostas_formulario 
                       (formulario_id, cliente_id, data_envio, data_resposta) 
                       VALUES (?, ?, NOW(), NOW())";
        $stmtResposta = $conn->prepare($sqlResposta);
        
        if (!$stmtResposta) {
            throw new Exception("Erro ao preparar inserção de resposta: " . $conn->error);
        }
        
        // Calcular nota final
        foreach ($respostas as $pergunta_id => $resposta_valor) {
            if (is_array($resposta_valor)) {
                // Resposta múltipla (checkbox)
                foreach ($resposta_valor as $opcao_id) {
                    if (is_numeric($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 ($result_pontuacao->num_rows > 0) {
                            $opcao_data = $result_pontuacao->fetch_assoc();
                            $pontuacao = $opcao_data['pontuacao'] ?? 0;
                            $nota_final += $pontuacao;
                            error_log("Opção $opcao_id - Pontuação: $pontuacao");
                        }
                    }
                }
            } elseif (is_numeric($resposta_valor)) {
                // Resposta única (radio)
                $stmt_pontuacao = $conn->prepare("SELECT pontuacao FROM opcoes_resposta WHERE id = ?");
                $stmt_pontuacao->bind_param("i", $resposta_valor);
                $stmt_pontuacao->execute();
                $result_pontuacao = $stmt_pontuacao->get_result();
                
                if ($result_pontuacao->num_rows > 0) {
                    $opcao_data = $result_pontuacao->fetch_assoc();
                    $pontuacao = $opcao_data['pontuacao'] ?? 0;
                    $nota_final += $pontuacao;
                    error_log("Opção $resposta_valor - Pontuação: $pontuacao");
                }
            }
            // Respostas de texto não contribuem para pontuação
        }

        error_log("Nota final calculada: $nota_final");
        
        // Inserir resposta principal
        $stmtResposta->bind_param("ii", $questionario_id, $cliente_id);
        
        if (!$stmtResposta->execute()) {
            throw new Exception("Erro ao salvar resposta do questionário: " . $stmtResposta->error);
        }
        
        $resposta_id = $conn->insert_id;
        error_log("Resposta principal inserida com ID: $resposta_id");
        
        // Registrar detalhes das respostas
        foreach ($respostas as $pergunta_id => $resposta_valor) {
            if (is_array($resposta_valor)) {
                // Resposta múltipla
                foreach ($resposta_valor as $opcao_id) {
                    if (is_numeric($opcao_id)) {
                        $sqlDetalhe = "INSERT INTO respostas 
                                      (resposta_formulario_id, pergunta_id, opcao_id) 
                                      VALUES (?, ?, ?)";
                        $stmtDetalhe = $conn->prepare($sqlDetalhe);
                        $stmtDetalhe->bind_param("iii", $resposta_id, $pergunta_id, $opcao_id);
                        
                        if (!$stmtDetalhe->execute()) {
                            throw new Exception("Erro ao salvar detalhe da resposta: " . $stmtDetalhe->error);
                        }
                        
                        error_log("Resposta salva: Pergunta $pergunta_id = Opção $opcao_id");
                    }
                }
            } elseif (is_numeric($resposta_valor)) {
                // Resposta única
                $sqlDetalhe = "INSERT INTO respostas 
                              (resposta_formulario_id, pergunta_id, opcao_id) 
                              VALUES (?, ?, ?)";
                $stmtDetalhe = $conn->prepare($sqlDetalhe);
                $stmtDetalhe->bind_param("iii", $resposta_id, $pergunta_id, $resposta_valor);
                
                if (!$stmtDetalhe->execute()) {
                    throw new Exception("Erro ao salvar detalhe da resposta: " . $stmtDetalhe->error);
                }
                
                error_log("Resposta salva: Pergunta $pergunta_id = Opção $resposta_valor");
            } else {
                // Resposta de texto
                $resposta_texto = trim($resposta_valor);
                if (!empty($resposta_texto)) {
                    $sqlDetalhe = "INSERT INTO respostas 
                                  (resposta_formulario_id, pergunta_id, resposta_texto) 
                                  VALUES (?, ?, ?)";
                    $stmtDetalhe = $conn->prepare($sqlDetalhe);
                    $stmtDetalhe->bind_param("iis", $resposta_id, $pergunta_id, $resposta_texto);
                    
                    if (!$stmtDetalhe->execute()) {
                        throw new Exception("Erro ao salvar resposta de texto: " . $stmtDetalhe->error);
                    }
                    
                    error_log("Resposta salva: Pergunta $pergunta_id = Texto: $resposta_texto");
                }
            }
        }
        
        // === CORREÇÃO: VERIFICAR TEMPERATURA MÍNIMA ===
        $aprovado = false;
        $temperatura_atingida = null;
        $temperatura_minima_nome = null;
        $nota_minima_necessaria = 0;

        error_log("=== VALIDAÇÃO DE TEMPERATURA ===");
        error_log("Tipo do formulário: " . ($questionario_data['tipo'] ?? 'N/A'));
        error_log("Estrutura existe: " . (!empty($questionario_data['estrutura']) ? 'SIM' : 'NÃO'));

        // Se for questionário com sistema de temperaturas
        if ($questionario_data['tipo'] === 'questionario' && !empty($questionario_data['estrutura'])) {
            $estrutura = json_decode($questionario_data['estrutura'], true);
            error_log("Estrutura decodificada: " . print_r($estrutura, true));
            
            if ($estrutura && isset($estrutura['temperaturas']) && isset($estrutura['temperatura_minima'])) {
                $temperaturas = $estrutura['temperaturas'];
                $temperatura_minima_nome = $estrutura['temperatura_minima'];
                
                error_log("Temperaturas configuradas: " . print_r($temperaturas, true));
                error_log("Temperatura mínima exigida: " . $temperatura_minima_nome);
                
                // CORREÇÃO: Encontrar a nota mínima necessária para a temperatura mínima
                $nota_minima_necessaria = null;
                foreach ($temperaturas as $temp) {
                    if ($temp['nome'] === $temperatura_minima_nome) {
                        $nota_minima_necessaria = (float)$temp['nota'];
                        break;
                    }
                }
                
                // CORREÇÃO: Se não encontrou a temperatura mínima, usar a mais baixa como fallback
                if ($nota_minima_necessaria === null) {
                    error_log("Temperatura mínima '$temperatura_minima_nome' não encontrada nas temperaturas disponíveis");
                    // Usar a temperatura com menor nota como fallback
                    $temp_mais_baixa = null;
                    foreach ($temperaturas as $temp) {
                        if ($temp_mais_baixa === null || $temp['nota'] < $temp_mais_baixa['nota']) {
                            $temp_mais_baixa = $temp;
                        }
                    }
                    $nota_minima_necessaria = $temp_mais_baixa ? (float)$temp_mais_baixa['nota'] : 0;
                    $temperatura_minima_nome = $temp_mais_baixa ? $temp_mais_baixa['nome'] : 'Não definida';
                }
                
                // CORREÇÃO: Determinar qual temperatura foi atingida (a MAIS ALTA possível)
                $temperatura_atingida = 'Congelado'; // padrão - temperatura mais baixa
                
                // Ordenar temperaturas por nota (da mais alta para a mais baixa)
                usort($temperaturas, function($a, $b) {
                    return $b['nota'] - $a['nota'];
                });
                
                error_log("Temperaturas ordenadas: " . print_r($temperaturas, true));
                
                // Encontrar a temperatura mais alta que a nota final atinge
                foreach ($temperaturas as $temp) {
                    if ($nota_final >= (float)$temp['nota']) {
                        $temperatura_atingida = $temp['nome'];
                        break;
                    }
                }
                
                // CORREÇÃO: Verificar se a nota final atinge a nota mínima da temperatura exigida
                $aprovado = $nota_final >= $nota_minima_necessaria;
                
                error_log("RESULTADO FINAL:");
                error_log("Nota final do cliente: " . $nota_final);
                error_log("Temperatura atingida: " . $temperatura_atingida);
                error_log("Temperatura mínima exigida: " . $temperatura_minima_nome);
                error_log("Nota mínima necessária: " . $nota_minima_necessaria);
                error_log("Aprovado: " . ($aprovado ? 'SIM' : 'NÃO'));
                
            } else {
                // Fallback para o sistema antigo
                error_log("Estrutura de temperaturas incompleta - usando sistema antigo");
                $nota_minima = $questionario_data['nota_minima'] ?? 0;
                $aprovado = $nota_final >= $nota_minima;
                $temperatura_atingida = 'Sistema Antigo (fallback)';
            }
        } else {
            // Para formulários por email (sistema antigo)
            error_log("Usando sistema antigo (não é questionário ou sem estrutura)");
            $nota_minima = $questionario_data['nota_minima'] ?? 0;
            $aprovado = $nota_final >= $nota_minima;
            $temperatura_atingida = 'Sistema Antigo';
        }

        // Se aprovado, mover cliente para a próxima etapa
        if ($aprovado) {
            $sqlUpdate = "UPDATE clientes SET etapa_funil_id = ? WHERE id = ? AND tenant_id = ?";
            $stmtUpdate = $conn->prepare($sqlUpdate);
            $stmtUpdate->bind_param("iii", $etapa_id, $cliente_id, $tenant_id);
            
            if (!$stmtUpdate->execute()) {
                throw new Exception("Erro ao atualizar etapa do cliente: " . $stmtUpdate->error);
            }
            
            // Registrar log
            $sqlLog = "INSERT INTO cliente_logs (cliente_id, usuario_id, nome_usuario, acao, detalhes, tenant_id) 
                      VALUES (?, ?, ?, 'questionario_aprovado', ?, ?)";
            $stmtLog = $conn->prepare($sqlLog);
            $detalhes = "Questionário '{$questionario_data['nome']}' APROVADO. ";
            $detalhes .= "Nota: " . number_format($nota_final, 2) . ", ";
            $detalhes .= "Temperatura: " . $temperatura_atingida;
            $nome_usuario = $_SESSION['nome_usuario'] ?? 'Sistema';
            $stmtLog->bind_param("iisss", $cliente_id, $usuario_id, $nome_usuario, $detalhes, $tenant_id);
            $stmtLog->execute();
            
            $success_message = "Questionário APROVADO! Cliente movido para a etapa: $etapa_nome. ";
            $success_message .= "Nota: " . number_format($nota_final, 2) . ", ";
            $success_message .= "Temperatura: " . $temperatura_atingida;
        } else {
            // Registrar log de reprovação
            $sqlLog = "INSERT INTO cliente_logs (cliente_id, usuario_id, nome_usuario, acao, detalhes, tenant_id) 
                      VALUES (?, ?, ?, 'questionario_reprovado', ?, ?)";
            $stmtLog = $conn->prepare($sqlLog);
            $detalhes = "Questionário '{$questionario_data['nome']}' REPROVADO. ";
            $detalhes .= "Nota: " . number_format($nota_final, 2) . ", ";
            $detalhes .= "Temperatura: " . $temperatura_atingida . ", ";
            $detalhes .= "Temperatura mínima necessária: " . ($temperatura_minima_nome ?? 'N/A');
            $nome_usuario = $_SESSION['nome_usuario'] ?? 'Sistema';
            $stmtLog->bind_param("iisss", $cliente_id, $usuario_id, $nome_usuario, $detalhes, $tenant_id);
            $stmtLog->execute();
            
            $success_message = "Questionário respondido, mas NÃO ATINGIU a temperatura mínima necessária. ";
            $success_message .= "Nota: " . number_format($nota_final, 2) . ", ";
            $success_message .= "Temperatura: " . $temperatura_atingida . ", ";
            $success_message .= "Mínima necessária: " . ($temperatura_minima_nome ?? 'N/A');
        }
        
        $conn->commit();

        // ✅ CORREÇÃO: Chamar fluxos automatizados após questionário aprovado
        if ($aprovado) {
            require_once 'verificador_fluxos_automatizados.php';
            
            $dados_adicionais = [
                'tenant_id' => $tenant_id,
                'questionario_id' => $questionario_id,
                'nota_final' => $nota_final,
                'temperatura_atingida' => $temperatura_atingida,
                'evento_tipo' => 'cliente_qualificado'
            ];
            
            $atividades_criadas = criarAtividadesPorFluxo($conn, 'cliente_qualificado', $cliente_id, $dados_adicionais);
            
            if ($atividades_criadas > 0) {
                error_log("✅ $atividades_criadas atividades criadas automaticamente via fluxos");
                $success_message .= " | $atividades_criadas atividade(s) automática(s) criada(s)";
            }
        }
        
    } catch (Exception $e) {
        $conn->rollback();
        $error_message = "Erro ao processar respostas: " . $e->getMessage();
        error_log("Erro no processamento: " . $e->getMessage());
    }
    
// Se houve processamento, mostrar resultado e fechar
if ($success_message || $error_message) {
    echo "<script>
        alert('" . ($success_message ?: $error_message) . "');
        if (window.opener && !window.opener.closed) {
            window.opener.location.reload();
        }
        window.close();
    </script>";
    exit;
}
}
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon_io/favicon-16x16.png">
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon_io/favicon-32x32.png">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Aplicar Questionário - SON</title>
    <meta name="csrf-token" content="<?php echo $_SESSION['csrf_token']; ?>">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
    <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
    <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
            background-color: #f5f5f5;
        }
        
        .header-fixed {
            position: fixed;
            top: 0;
            left: 0;
            right: 0;
            background-color: #f5f5f5;
            padding: 15px 20px;
            z-index: 1000;
            box-shadow: 0 2px 5px rgba(0,0,0,0.1);
            display: flex;
            justify-content: space-between;
            align-items: center;
        }
        
        .header-fixed img {
            height: 50px;
            margin-right: 15px;
        }
        
        .header-fixed h2 {
            margin: 0;
            flex-grow: 1;
            text-align: center;
        }
        
        /* Menu Lateral Recolhível - AGORA NA ESQUERDA */
        .sidebar {
            position: fixed;
            left: 0;
            top: 80px;
            height: calc(100vh - 80px);
            width: 60px;
            background: white;
            box-shadow: 2px 0 5px rgba(0,0,0,0.1);
            z-index: 999;
            transition: width 0.3s ease;
            overflow-x: hidden;
        }
        
        .sidebar-menu {
            list-style: none;
            padding: 0;
            margin: 0;
        }
        
        .sidebar-menu li {
            border-bottom: 1px solid #eee;
        }
        
        .sidebar-menu a {
            display: flex;
            align-items: center;
            padding: 15px 20px;
            text-decoration: none;
            color: #333;
            white-space: nowrap;
            transition: background-color 0.3s;
        }
        
        .sidebar-menu i {
            width: 24px;
            height: 24px;
            margin-right: 15px;
            text-align: center;
            flex-shrink: 0;
        }
        
        .sidebar-menu .menu-text {
            opacity: 0;
            transition: opacity 0.3s ease;
        }

        /* Classes para menu */
        .menu-btn-success {
            color: #6B8E23;
        }
        
        .menu-btn-primary {
            color: #0000FF;
        }
        
        .menu-btn-danger {
            color: #e74c3c;
        }
        
        /* Conteúdo Principal */
        .content-wrapper {
            margin-top: 120px;
            padding: 20px;
        }
        
        .container {
            max-width: 1800px;
            margin: 0 auto;
            background: white;
            padding: 25px;
            border-radius: 8px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
        }
        
        /* Estilos do Formulário */
        .form-group {
            margin-bottom: 20px;
        }
        
        .form-group label {
            display: block;
            margin-bottom: 5px;
            font-weight: bold;
            color: #333;
        }
        
        .form-control {
            width: 100%;
            padding: 10px;
            border: 1px solid #ddd;
            border-radius: 4px;
            box-sizing: border-box;
        }
        
        .btn {
            padding: 10px 20px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
            text-decoration: none;
            display: inline-block;
            text-align: center;
        }
        
        .btn-success {
            background-color: #28a745;
            color: white;
        }
        
        .btn-primary {
            background-color: #007bff;
            color: white;
        }
        
        .btn-danger {
            background-color: #dc3545;
            color: white;
        }
        
        .btn-secondary {
            background-color: #6c757d;
            color: white;
        }
        
        .btn:hover {
            opacity: 0.9;
        }
        
        /* Estilos para as perguntas - APLICAÇÃO DA REGRA */
        .pergunta-item {
            border: 1px solid #dee2e6;
            border-radius: 8px;
            padding: 20px;
            margin-bottom: 20px;
            transition: all 0.3s ease;
        }
        
        .pergunta-item:hover {
            box-shadow: 0 2px 8px rgba(0,0,0,0.1);
        }
        
        .pergunta-condicional {
            margin-top: 10px;
        }
        
        /* APLICAÇÃO DA REGRA: Estilos específicos para obrigatórias e opcionais */
        .pergunta-obrigatoria {
            border-left: 4px solid #e74c3c;
            background: #fff5f5;
        }
        
        .pergunta-opcional {
            border-left: 4px solid #f39c12;
            background: #fffaf0;
        }
        
        .obrigatoria-indicator {
            color: #e74c3c;
            font-size: 12px;
            margin-left: 10px;
            font-weight: normal;
        }
        
        .opcional-indicator {
            color: #f39c12;
            font-size: 12px;
            margin-left: 10px;
            font-weight: normal;
        }
        
        .opcoes {
            display: flex;
            flex-direction: column;
            gap: 10px;
        }
        
        .opcao-container {
            padding: 10px;
            border: 1px solid #e9ecef;
            border-radius: 6px;
            background: white;
            transition: all 0.2s ease;
        }
        
        .opcao-container:hover {
            background: #f8f9fa;
            border-color: #007bff;
        }
        
        .opcao-label {
            display: flex;
            align-items: center;
            cursor: pointer;
            margin: 0;
            font-weight: normal;
            width: 100%;
        }
        
        .opcao-label input[type="checkbox"],
        .opcao-label input[type="radio"] {
            margin-right: 10px;
            transform: scale(1.2);
        }
        
        .opcao-texto {
            flex-grow: 1;
            margin-right: 10px;
        }
        
        .pontuacao-badge {
            background: #28a745;
            color: white;
            padding: 2px 8px;
            border-radius: 12px;
            font-size: 0.8em;
            font-weight: bold;
        }
        
        .required {
            color: #dc3545;
            font-weight: bold;
        }
        
        .info-cliente {
            background: #e7f3ff;
            border: 1px solid #b3d9ff;
            border-radius: 6px;
            padding: 15px;
            margin-bottom: 20px;
        }
        
        .info-cliente h3 {
            margin-top: 0;
            color: #0066cc;
        }
        
        .info-cliente p {
            margin: 5px 0;
        }
        
        /* Estilo para erro de validação */
        .erro-validacao {
            border-color: #e74c3c !important;
            background: #ffe6e6 !important;
            box-shadow: 0 0 0 2px rgba(231, 76, 60, 0.1);
        }
        
        /* Responsividade */
        @media (max-width: 768px) {
            .sidebar {
                width: 50px;
            }
            
            .content-wrapper {
                margin-left: 50px;
            }
            
            .obrigatoria-indicator,
            .opcional-indicator {
                display: block;
                margin-left: 0;
                margin-top: 5px;
            }
        }
        
        /* Estilo para o botão de voltar */
        .btn-voltar {
            background-color: #6c757d;
            color: white;
            padding: 8px 16px;
            border-radius: 4px;
            text-decoration: none;
            display: inline-flex;
            align-items: center;
            gap: 5px;
            margin-bottom: 20px;
        }
        
        .btn-voltar:hover {
            background-color: #5a6268;
            color: white;
            text-decoration: none;
        }
    </style>
</head>
<body>
    <div class="header-fixed">
        <img src="tvitec.png" alt="Logo TVITEC" style="height:40px;">
        <h2>Aplicar Questionário: <?php echo htmlspecialchars($questionario_data['nome'] ?? 'Questionário'); ?></h2>
        <div class="user-info" style="display:flex; align-items:center; gap:10px;">
            <?php if (!empty($_SESSION['foto_perfil'])): ?>
                <img src="<?php echo htmlspecialchars($_SESSION['foto_perfil']); ?>" class="user-photo" alt="Foto do usuário" style="width:40px; height:40px; border-radius:50%;">
            <?php else: ?>
                <div class="user-initial" style="width:40px; height:40px; border-radius:50%; background:#ccc; display:flex; align-items:center; justify-content:center; font-weight:bold; font-size:1.2em;">
                    <?php echo strtoupper(substr($_SESSION['nome_usuario'] ?? 'U', 0, 1)); ?>
                </div>
            <?php endif; ?>
            <div style="text-align:left;">
                <div style="font-weight: bold; color: #333; font-size: 1.1em;">
                    <?php echo htmlspecialchars($_SESSION['nome_usuario'] ?? 'Usuário'); ?>
                </div>
                <div style="font-size: 0.9em; color: #555;">
                    <?php echo htmlspecialchars($_SESSION['email_usuario'] ?? ''); ?>
                </div>
            </div>
        </div>
    </div>

    <!-- Conteúdo Principal -->
    <div class="content-wrapper">
        <div class="container">
       
            <!-- Informações do Cliente -->
            <div class="info-cliente">
                <h3><i class="fas fa-user"></i> Informações do Cliente</h3>
                <p><strong>Nome:</strong> <?php echo htmlspecialchars($cliente_nome ?? 'N/A'); ?></p>
                <p><strong>Email:</strong> <?php echo htmlspecialchars($cliente_email ?? 'N/A'); ?></p>
                <p><strong>Questionário:</strong> <?php echo htmlspecialchars($questionario_data['nome'] ?? 'N/A'); ?></p>
                <p><strong>Etapa:</strong> <?php echo htmlspecialchars($etapa_nome ?? 'N/A'); ?></p>
            </div>

            <!-- Formulário do Questionário -->
            <form id="formQuestionario" method="POST">
                <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
                
                <?php
                $pergunta_numero = 1;
                echo renderizarPerguntas($perguntas, $pergunta_numero);
                ?>
                
                <div class="form-group" style="margin-top: 30px;">
                    <button type="submit" class="btn btn-success">
                        <i class="fas fa-paper-plane"></i> Enviar Respostas
                    </button>
                    <button type="button" class="btn btn-secondary" onclick="window.close()">
                        <i class="fas fa-times"></i> Cancelar
                    </button>
                </div>
            </form>
        </div>
    </div>

    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
    <script>
    $(document).ready(function() {
        // APLICAÇÃO DA REGRA: Aplicar classes CSS baseadas na obrigatoriedade
        function aplicarEstilosObrigatoriedade() {
            $('.pergunta-item').each(function() {
                const isObrigatoria = $(this).data('obrigatoria') == '1';
                if (isObrigatoria) {
                    $(this).addClass('pergunta-obrigatoria').removeClass('pergunta-opcional');
                } else {
                    $(this).addClass('pergunta-opcional').removeClass('pergunta-obrigatoria');
                }
            });
        }
        
        // Aplicar estilos inicialmente
        aplicarEstilosObrigatoriedade();
        
        // Controlar exibição de perguntas condicionais
        function toggleCondicionais() {
            // Primeiro, esconder todas as condicionais
            $('.pergunta-condicional').hide();
            
            // Depois, mostrar apenas as condicionais das respostas selecionadas
            $('input[type="radio"]:checked, input[type="checkbox"]:checked').each(function() {
                const respostaId = $(this).data('resposta-id');
                // Mostrar condicionais para esta resposta
                $(`.pergunta-condicional[data-parent-resposta="${respostaId}"]`).show();
            });
            
            // Reaplicar estilos após mostrar/ocultar condicionais
            aplicarEstilosObrigatoriedade();
        }
        
        // Inicializar estado das condicionais
        toggleCondicionais();
        
        // Atualizar quando respostas mudarem
        $('input[type="radio"], input[type="checkbox"]').change(function() {
            toggleCondicionais();
        });
        
        // CORREÇÃO DEFINITIVA: Validação manual SEMPRE - mesma lógica do arquivo debug
        $('#formQuestionario').on('submit', function(e) {
            e.preventDefault(); // Sempre prevenir envio padrão
            
            let valido = true;
            let erros = [];
            
            // Resetar estilos de erro
            $('.pergunta-item').removeClass('erro-validacao');
            
            // Debug info
            console.log("\n=== VALIDANDO FORMULÁRIO ===");
            console.log("Total de perguntas: " + $('.pergunta-item').length);
            console.log("Perguntas visíveis: " + $('.pergunta-item:visible').length);
            
            // Validar todas as perguntas VISÍVEIS
            $('.pergunta-item:visible').each(function() {
                const elemento = $(this);
                const obrigatoria = elemento.data('obrigatoria') == '1';
                const visivel = elemento.is(':visible');
                const nivel = parseInt(elemento.data('nivel')) || 0;
                
                // Debug info para cada elemento
                console.log(`Elemento ID: ${elemento.data('pergunta-id')}, Obrigatória: ${obrigatoria}, Visível: ${visivel}, Nível: ${nivel}`);
                
                // CORREÇÃO: Para perguntas condicionais (nivel > 0), verificar se a resposta pai está selecionada
                let deveValidar = true;
                
                if (nivel > 0) {
                    const parentRespostaId = elemento.data('parent-resposta');
                    if (parentRespostaId) {
                        // Verificar se a resposta pai está selecionada
                        const parentRespostaSelecionada = $(`input[data-resposta-id="${parentRespostaId}"]:checked`).length > 0;
                        
                        // Se a resposta pai NÃO está selecionada, NÃO validar esta pergunta condicional
                        if (!parentRespostaSelecionada) {
                            deveValidar = false;
                            console.log(`  -> NÃO validar: resposta pai ${parentRespostaId} não está selecionada`);
                        } else {
                            console.log(`  -> Validar: resposta pai ${parentRespostaId} está selecionada`);
                        }
                    }
                }
                
                // Validar apenas se for obrigatória, visível e (não for condicional OU for condicional com pai selecionado)
                if (obrigatoria && visivel && deveValidar) {
                    let respondida = false;
                    
                    // Verificar radios
                    const radios = elemento.find('input[type="radio"]');
                    if (radios.length > 0) {
                        respondida = radios.filter(':checked').length > 0;
                        console.log(`  Tipo: radio, Respondida: ${respondida}`);
                    }
                    
                    // Verificar checkbox (para perguntas do tipo múltipla)
                    if (!respondida) {
                        const checkboxes = elemento.find('input[type="checkbox"]');
                        if (checkboxes.length > 0) {
                            // Para perguntas com checkbox, precisa ter pelo menos um selecionado
                            const perguntaId = elemento.data('pergunta-id');
                            const temCheckboxSelecionado = $(`input[name^="respostas[${perguntaId}]"]:checked`).length > 0;
                            respondida = temCheckboxSelecionado;
                            console.log(`  Tipo: checkbox, Respondida: ${respondida}`);
                        }
                    }
                    
                    // Verificar texto
                    if (!respondida) {
                        const textos = elemento.find('input[type="text"]');
                        if (textos.length > 0) {
                            respondida = textos.val().trim() !== '';
                            console.log(`  Tipo: texto, Respondida: ${respondida}`);
                        }
                    }
                    
                    if (!respondida) {
                        valido = false;
                        const perguntaTexto = elemento.find('h4').text()
                            .replace('*', '')
                            .replace(/(Obrigatória|Opcional)/g, '')
                            .replace(/\s+/g, ' ')
                            .trim();
                        
                        erros.push(`• "${perguntaTexto}"`);
                        elemento.addClass('erro-validacao');
                        console.log(`  -> ERRO: Não respondida`);
                    } else {
                        console.log(`  -> OK: Respondida`);
                    }
                } else {
                    console.log(`  -> NÃO validar: Obrigatória: ${obrigatoria}, Deve validar: ${deveValidar}`);
                }
            });
            
            if (!valido) {
                Swal.fire({
                    icon: 'warning',
                    title: 'Campos obrigatórios não preenchidos',
                    html: 'Por favor, responda as seguintes perguntas obrigatórias:<br><br>' + 
                          erros.join('<br>'),
                    confirmButtonText: 'Entendi'
                }).then(() => {
                    // Rolar para a primeira pergunta não respondida
                    const primeiraPergunta = $('.pergunta-item.erro-validacao').first();
                    if (primeiraPergunta.length) {
                        $('html, body').animate({
                            scrollTop: primeiraPergunta.offset().top - 100
                        }, 500);
                    }
                });
            } else {
                // Mostrar confirmação antes de enviar
                Swal.fire({
                    title: 'Enviar respostas?',
                    text: 'Após o envio, o cliente será movido de etapa se aprovado no questionário.',
                    icon: 'question',
                    showCancelButton: true,
                    confirmButtonColor: '#28a745',
                    cancelButtonColor: '#6c757d',
                    confirmButtonText: 'Sim, enviar!',
                    cancelButtonText: 'Cancelar'
                }).then((result) => {
                    if (result.isConfirmed) {
                        // Desabilitar botão para evitar múltiplos envios
                        $('button[type="submit"]').prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i> Enviando...');
                        
                        // Remover qualquer atributo required que possa ter sido adicionado anteriormente
                        $('input[required]').prop('required', false);
                        
                        // Adicionar required apenas às perguntas obrigatórias que DEVEM ser validadas
                        $('.pergunta-item:visible').each(function() {
                            const elemento = $(this);
                            const obrigatoria = elemento.data('obrigatoria') == '1';
                            const nivel = parseInt(elemento.data('nivel')) || 0;
                            
                            if (obrigatoria) {
                                let deveAdicionarRequired = true;
                                
                                if (nivel > 0) {
                                    const parentRespostaId = elemento.data('parent-resposta');
                                    if (parentRespostaId) {
                                        const parentRespostaSelecionada = $(`input[data-resposta-id="${parentRespostaId}"]:checked`).length > 0;
                                        if (!parentRespostaSelecionada) {
                                            deveAdicionarRequired = false;
                                        }
                                    }
                                }
                                
                                if (deveAdicionarRequired) {
                                    elemento.find('input[type="radio"]').prop('required', true);
                                    elemento.find('input[type="text"]').prop('required', true);
                                }
                            }
                        });
                        
                        // Enviar formulário
                        document.getElementById('formQuestionario').submit();
                    }
                });
            }
        });
        
        // Efeito hover no menu lateral
        $('.sidebar').hover(
            function() {
                $(this).css('width', '200px');
                $('.menu-text').css('opacity', '1');
            },
            function() {
                $(this).css('width', '60px');
                $('.menu-text').css('opacity', '0');
            }
        );
    });
    </script>
</body>
</html>