<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

session_start();

require_once 'conexao.php';
if (!$conn) {
    header("HTTP/1.1 500 Internal Server Error");
    die("Database connection error: " . mysqli_connect_error());
}

// Função para salvar logs
function salvarLog($conn, $cliente_id, $acao, $detalhes, $tenant_id = null, $formulario_id = null, $envio_id = null, $resposta_id = null) {
    try {
        $usuario_id = 0; // 0 para sistema/automático
        $nome_usuario = 'Sistema Formulário';
        $observacao_id = 0;
        
        // Capturar informações do usuário se disponível
        if (isset($_SESSION['usuario_id'])) {
            $usuario_id = $_SESSION['usuario_id'];
            $nome_usuario = $_SESSION['nome_usuario'] ?? 'Usuário';
        }
        
        // Capturar informações do cliente/tenant se disponíveis
        if ($tenant_id === null) {
            // Tentar obter o tenant_id da tabela de clientes
            $stmtTenant = $conn->prepare("SELECT tenant_id FROM clientes WHERE id = ?");
            $stmtTenant->bind_param("i", $cliente_id);
            if ($stmtTenant->execute()) {
                $result = $stmtTenant->get_result();
                if ($row = $result->fetch_assoc()) {
                    $tenant_id = $row['tenant_id'];
                }
            }
            $stmtTenant->close();
        }
        
        // Capturar IP do usuário
        $ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
        $user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
        
        // Adicionar informações extras aos detalhes
        $detalhesCompletos = $detalhes;
        if ($formulario_id) {
            $detalhesCompletos .= " | Formulário ID: {$formulario_id}";
        }
        if ($envio_id) {
            $detalhesCompletos .= " | Envio ID: {$envio_id}";
        }
        if ($resposta_id) {
            $detalhesCompletos .= " | Resposta ID: {$resposta_id}";
        }
        $detalhesCompletos .= " | IP: {$ip} | User-Agent: {$user_agent}";
        
        // Inserir log
        $stmt = $conn->prepare("INSERT INTO cliente_logs 
                              (cliente_id, usuario_id, nome_usuario, acao, detalhes, tenant_id, atividade_id, observacao_id) 
                              VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
        
        if (!$stmt) {
            error_log("Erro ao preparar statement de log: " . $conn->error);
            return false;
        }
        
        $atividade_id = null;
        $stmt->bind_param("iissssii", 
            $cliente_id, 
            $usuario_id, 
            $nome_usuario, 
            $acao, 
            $detalhesCompletos, 
            $tenant_id, 
            $atividade_id, 
            $observacao_id
        );
        
        $result = $stmt->execute();
        $stmt->close();
        
        if (!$result) {
            error_log("Erro ao salvar log: " . $conn->error);
        }
        
        return $result;
        
    } catch (Exception $e) {
        error_log("Exceção ao salvar log: " . $e->getMessage());
        return false;
    }
}

// Verificar parâmetros obrigatórios
if (!isset($_GET['cliente_id'], $_GET['formulario_id'], $_GET['token'])) {
    header("HTTP/1.1 400 Bad Request");
    die("Error: Required parameters missing.");
}

// Validar e filtrar parâmetros
$cliente_id = filter_var($_GET['cliente_id'], FILTER_VALIDATE_INT, ['options' => ['min_range' => 1]]);
$formulario_id = filter_var($_GET['formulario_id'], FILTER_VALIDATE_INT, ['options' => ['min_range' => 1]]);
$token = trim($_GET['token']);

if ($cliente_id === false || $formulario_id === false) {
    header("HTTP/1.1 400 Bad Request");
    die("Error: IDs must be positive integers.");
}

if (empty($token) || !preg_match('/^[a-f0-9]{32}$/', $token)) {
    header("HTTP/1.1 400 Bad Request");
    die("Error: Invalid token format.");
}



try {
    // Verificar token de acesso
    $stmtToken = $conn->prepare("SELECT ef.*, c.tenant_id 
                              FROM envios_formulario ef
                              JOIN clientes c ON ef.cliente_id = c.id
                              WHERE ef.cliente_id = ? AND ef.formulario_id = ? AND ef.token = ? 
                              AND ef.data_resposta IS NULL");
    
    if (!$stmtToken) throw new Exception("Prepare failed: " . $conn->error);
    
    $stmtToken->bind_param("iis", $cliente_id, $formulario_id, $token);
    if (!$stmtToken->execute()) throw new Exception("Execute failed: " . $stmtToken->error);
    
    $result = $stmtToken->get_result();
    $envio = $result->fetch_assoc();
    $stmtToken->close();
    
    if (!$envio) {
        salvarLog($conn, $cliente_id, 'TOKEN_INVALIDO', 
            "Token inválido, expirado ou já respondido. Token: {$token}",
            null, $formulario_id
        );
        header("HTTP/1.1 404 Not Found");
        die("Erro: link invalido, expirado, ou ja respondido.");
    }
    
    $tenant_id = $envio['tenant_id'];
    $envio_id = $envio['id'];
    
   
    
} catch (Exception $e) {
    salvarLog($conn, $cliente_id, 'ERRO_VERIFICACAO', 
        "Erro na verificação do token: " . $e->getMessage(),
        null, $formulario_id
    );
    header("HTTP/1.1 500 Internal Server Error");
    die("Token verification error: " . $e->getMessage());
}

// Buscar dados do formulário
try {
    $stmtForm = $conn->prepare("SELECT * FROM formularios WHERE id = ?");
    if (!$stmtForm) throw new Exception("Prepare failed: " . $conn->error);
    
    $stmtForm->bind_param("i", $formulario_id);
    if (!$stmtForm->execute()) throw new Exception("Execute failed: " . $stmtForm->error);
    
    $formulario = $stmtForm->get_result()->fetch_assoc();
    $stmtForm->close();
    
    if (!$formulario) {
        salvarLog($conn, $cliente_id, 'FORMULARIO_NAO_ENCONTRADO', 
            "Formulário ID: {$formulario_id} não encontrado",
            $tenant_id, $formulario_id, $envio_id
        );
        header("HTTP/1.1 404 Not Found");
        die("Error: Form not found.");
    }
    
} catch (Exception $e) {
    salvarLog($conn, $cliente_id, 'ERRO_BUSCA_FORMULARIO', 
        "Erro ao buscar formulário: " . $e->getMessage(),
        $tenant_id, $formulario_id, $envio_id
    );
    header("HTTP/1.1 500 Internal Server Error");
    die("Form data error: " . $e->getMessage());
}

// Função recursiva para construir perguntas condicionais
function construirEstruturaPerguntas($perguntas, $opcoesPorPergunta, &$perguntasCondicionais, $parentRespostaId = null) {
    $resultado = [];
    
    foreach ($perguntas as $pergunta) {
        if ($pergunta['parent_resposta_id'] == $parentRespostaId) {
            $pergunta['opcoes'] = $opcoesPorPergunta[$pergunta['id']] ?? [];
            
            foreach ($pergunta['opcoes'] as &$opcao) {
                if (isset($perguntasCondicionais[$opcao['id']])) {
                    $opcao['condicionais'] = construirEstruturaPerguntas(
                        $perguntasCondicionais[$opcao['id']], 
                        $opcoesPorPergunta, 
                        $perguntasCondicionais, 
                        $opcao['id']
                    );
                } else {
                    $opcao['condicionais'] = [];
                }
            }
            unset($opcao);
            
            $resultado[] = $pergunta;
        }
    }
    
    return $resultado;
}

// Buscar perguntas e opções
try {
    // Buscar todas as perguntas
    $stmtPerguntas = $conn->prepare("
        SELECT p.id, p.texto as pergunta, p.tipo, p.obrigatoria, p.parent_resposta_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", $formulario_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
    $stmtOpcoes = $conn->prepare("
        SELECT o.id, o.pergunta_id, o.texto, o.pontuacao
        FROM opcoes_resposta o
        WHERE o.pergunta_id IN (
            SELECT id FROM perguntas WHERE formulario_id = ?
        )
        ORDER BY o.ordem, o.id
    ");
    $stmtOpcoes->bind_param("i", $formulario_id);
    $stmtOpcoes->execute();
    $todasOpcoes = $stmtOpcoes->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmtOpcoes->close();

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

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

    // Construir estrutura hierárquica
    $perguntas = construirEstruturaPerguntas($perguntasPrincipais, $opcoesPorPergunta, $perguntasCondicionais);

} catch (Exception $e) {
    salvarLog($conn, $cliente_id, 'ERRO_BUSCA_PERGUNTAS', 
        "Erro ao buscar perguntas: " . $e->getMessage(),
        $tenant_id, $formulario_id, $envio_id
    );
    header("HTTP/1.1 500 Internal Server Error");
    die("Questions retrieval error: " . $e->getMessage());
}

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

// Processar envio do formulário
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Validar CSRF token
    if (!isset($_POST['csrf_token']) || !hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
        salvarLog($conn, $cliente_id, 'CSRF_INVALIDO', 
            "Tentativa de envio com CSRF token inválido",
            $tenant_id, $formulario_id, $envio_id
        );
        header("HTTP/1.1 403 Forbidden");
        die("Error: Invalid security token.");
    }

    // Validar respostas
    if (empty($_POST['respostas']) || !is_array($_POST['respostas'])) {
        salvarLog($conn, $cliente_id, 'RESPOSTAS_VAZIAS', 
            "Tentativa de envio sem respostas",
            $tenant_id, $formulario_id, $envio_id
        );
        header("HTTP/1.1 400 Bad Request");
        die("Error: No answers were submitted.");
    }

   

    try {
        $conn->begin_transaction();

        // Inserir resposta principal
        $stmtResposta = $conn->prepare("INSERT INTO respostas_formulario 
                                     (formulario_id, cliente_id, data_resposta) 
                                     VALUES (?, ?, NOW())");
        if (!$stmtResposta) throw new Exception("Prepare failed: " . $conn->error);
        
        $stmtResposta->bind_param("ii", $formulario_id, $cliente_id);
        if (!$stmtResposta->execute()) throw new Exception("Execute failed: " . $stmtResposta->error);
        
        $resposta_id = $conn->insert_id;
        $stmtResposta->close();

        

        $totalRespostas = 0;
        $respostasDetalhes = [];

        // Processar cada resposta
        foreach ($_POST['respostas'] as $pergunta_id => $resposta) {
            $pergunta_id = filter_var($pergunta_id, FILTER_VALIDATE_INT);
            if (!$pergunta_id) continue;

            if (is_array($resposta)) {
                // Múltipla escolha
                foreach ($resposta as $opcao) {
                    $opcao = trim($opcao);
                    if (!empty($opcao)) {
                        $stmtRespostaPergunta = $conn->prepare("INSERT INTO respostas_perguntas 
                                                              (resposta_formulario_id, pergunta_id, resposta_texto) 
                                                              VALUES (?, ?, ?)");
                        if (!$stmtRespostaPergunta) throw new Exception("Prepare failed: " . $conn->error);
                        $stmtRespostaPergunta->bind_param("iis", $resposta_id, $pergunta_id, $opcao);
                        if (!$stmtRespostaPergunta->execute()) throw new Exception("Execute failed: " . $stmtRespostaPergunta->error);
                        $stmtRespostaPergunta->close();
                        
                        $totalRespostas++;
                        $respostasDetalhes[] = "P{$pergunta_id}: Opção {$opcao}";
                    }
                }
            } else {
                // Resposta única
                $resposta = trim($resposta);
                if (!empty($resposta)) {
                    $stmtRespostaPergunta = $conn->prepare("INSERT INTO respostas_perguntas 
                                                          (resposta_formulario_id, pergunta_id, resposta_texto) 
                                                          VALUES (?, ?, ?)");
                    if (!$stmtRespostaPergunta) throw new Exception("Prepare failed: " . $conn->error);
                    $stmtRespostaPergunta->bind_param("iis", $resposta_id, $pergunta_id, $resposta);
                    if (!$stmtRespostaPergunta->execute()) throw new Exception("Execute failed: " . $stmtRespostaPergunta->error);
                    $stmtRespostaPergunta->close();
                    
                    $totalRespostas++;
                    $respostasDetalhes[] = "P{$pergunta_id}: {$resposta}";
                }
            }
        }

        // Atualizar envio como respondido
        $stmtUpdate = $conn->prepare("UPDATE envios_formulario SET data_resposta = NOW() 
                                    WHERE cliente_id = ? AND formulario_id = ? AND token = ?");
        if (!$stmtUpdate) throw new Exception("Prepare failed: " . $conn->error);
        $stmtUpdate->bind_param("iis", $cliente_id, $formulario_id, $token);
        if (!$stmtUpdate->execute()) throw new Exception("Execute failed: " . $stmtUpdate->error);
        $stmtUpdate->close();

        $conn->commit();

        // Registrar sucesso
        $detalhesSucesso = "Formulário respondido com sucesso. ";
        $detalhesSucesso .= "Total de respostas: {$totalRespostas}. ";
        $detalhesSucesso .= "Detalhes: " . implode(", ", array_slice($respostasDetalhes, 0, 5));
        if (count($respostasDetalhes) > 5) {
            $detalhesSucesso .= " e mais " . (count($respostasDetalhes) - 5) . " respostas";
        }
        
        salvarLog($conn, $cliente_id, 'Formulário respondido por e-mail', 
            $detalhesSucesso,
            $tenant_id, $formulario_id, $envio_id, $resposta_id
        );

        $_SESSION['form_submitted'] = true;
        header("Location: formulario_sucesso.php?token=" . urlencode($token));
        exit;

    } catch (Exception $e) {
        $conn->rollback();
        
        // Registrar erro
        salvarLog($conn, $cliente_id, 'ERRO_PROCESSAMENTO', 
            "Erro ao processar respostas: " . $e->getMessage(),
            $tenant_id, $formulario_id, $envio_id
        );
        
        header("HTTP/1.1 500 Internal Server Error");
        die("Submission processing error: " . $e->getMessage());
    }
}

// Função para renderizar perguntas
function renderizarPerguntasRecursivo($perguntas, &$pergunta_numero, $nivel = 0, $parentRespostaId = null) {
    $html = '';
    
    foreach ($perguntas as $pergunta) {
        $isObrigatoria = $pergunta['obrigatoria'] == 1;
        $marginLeft = $nivel * 30;
        $displayStyle = $nivel > 0 ? 'display: none;' : '';
        $classCondicional = $nivel > 0 ? ' pergunta-condicional' : '';
        
        $html .= '<div class="pergunta' . $classCondicional . '" ';
        $html .= 'data-pergunta-id="' . $pergunta['id'] . '" ';
        $html .= 'data-obrigatoria="' . ($isObrigatoria ? '1' : '0') . '" ';
        $html .= 'data-nivel="' . $nivel . '" ';
        if ($parentRespostaId) {
            $html .= 'data-condicional-de="' . $parentRespostaId . '" ';
        }
        $html .= 'style="margin-left: ' . $marginLeft . 'px; ' . $displayStyle . '"';
        $html .= '>';
        
        // Número da pergunta
        $numeroDisplay = '';
        if ($nivel === 0) {
            $numeroDisplay = $pergunta_numero . '. ';
        } else {
           $numeroDisplay = str_repeat($pergunta_numero . '.', $nivel + 1) . ' ';
        }
        
        $html .= '<h3>';
        $html .= $numeroDisplay . htmlspecialchars($pergunta['pergunta']);
        if ($isObrigatoria) {
            $html .= ' <span class="required" title="Obrigatória">*</span>';
            $html .= ' <span class="obrigatoria-indicator"><i class="fas fa-exclamation-circle"></i> Obrigatória </span>';
        } else {
            $html .= ' <span class="opcional-indicator"><i class="fas fa-info-circle"></i> Opcional</span>';
        }
        $html .= '</h3>';
        
        // Renderizar campo baseado no tipo
        if ($pergunta['tipo'] === 'texto') {
            $requiredAttr = $isObrigatoria && $nivel === 0 ? 'required' : '';
            $html .= '<input type="text" name="respostas[' . $pergunta['id'] . ']" ';
            $html .= 'style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px;" ';
            $html .= $requiredAttr . '>';
            
        } elseif ($pergunta['tipo'] === 'multipla') {
            $html .= '<div class="opcoes">';
            foreach ($pergunta['opcoes'] as $opcao) {
                $html .= '<div class="opcao-container">';
                $html .= '<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 .= 'class="input-resposta"> ';
                $html .= htmlspecialchars($opcao['texto']);
                $html .= '</label>';
                
                // Renderizar condicionais recursivamente
                if (!empty($opcao['condicionais'])) {
                    $sub_numero = $pergunta_numero;
                    $html .= renderizarPerguntasRecursivo($opcao['condicionais'], $sub_numero, $nivel + 1, $opcao['id']);
                }
                
                $html .= '</div>';
            }
            $html .= '</div>';
            
        } elseif ($pergunta['tipo'] === 'unica') {
            $html .= '<div class="opcoes">';
            foreach ($pergunta['opcoes'] as $opcao) {
                $html .= '<div class="opcao-container">';
                $html .= '<label>';
                $html .= '<input type="radio" ';
                $html .= 'name="respostas[' . $pergunta['id'] . ']" ';
                $html .= 'value="' . $opcao['id'] . '" ';
                $html .= 'data-pergunta-id="' . $pergunta['id'] . '" ';
                $html .= 'data-resposta-id="' . $opcao['id'] . '" ';
                $html .= 'class="input-resposta" ';
                $html .= ($isObrigatoria && $nivel === 0 ? 'required' : '') . '> ';
                $html .= htmlspecialchars($opcao['texto']);
                $html .= '</label>';
                
                // Renderizar condicionais recursivamente
                if (!empty($opcao['condicionais'])) {
                    $sub_numero = $pergunta_numero;
                    $html .= renderizarPerguntasRecursivo($opcao['condicionais'], $sub_numero, $nivel + 1, $opcao['id']);
                }
                
                $html .= '</div>';
            }
            $html .= '</div>';
        }
        
        $html .= '</div>';
        
        // Incrementar número apenas para perguntas de nível 0
        if ($nivel === 0) {
            $pergunta_numero++;
        }
    }
    
    return $html;
}
?>

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responder Formulário - <?= htmlspecialchars($formulario['nome']) ?></title>
    <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
    <style>
        body { 
            font-family: Arial, sans-serif; 
            line-height: 1.6; 
            margin: 0; 
            padding: 20px; 
            color: #333; 
            background-color: #f5f5f5;
        }
        .container { 
            max-width: 800px; 
            margin: 0 auto; 
            background: white; 
            padding: 30px; 
            border-radius: 8px; 
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
        }
        .pergunta { 
            margin-bottom: 25px; 
            padding: 20px; 
            background: #f9f9f9; 
            border-radius: 5px;
            border: 1px solid #dee2e6;
            transition: all 0.3s ease;
        }
        .pergunta:hover {
            box-shadow: 0 2px 8px rgba(0,0,0,0.1);
        }
        .pergunta-condicional {
            margin-top: 15px;
            margin-bottom: 15px;
            display: none;
        }
        .opcoes { 
            display: flex; 
            flex-direction: column; 
            gap: 10px; 
        }
        .opcao-container { 
            position: relative; 
            margin-bottom: 10px; 
            padding: 10px;
            border: 1px solid #e9ecef;
            border-radius: 6px;
            background: white;
            transition: all 0.2s ease;
        }
        .opcao-container:hover {
            background: #f8f9fa;
            border-color: #007bff;
        }
        .opcoes label { 
            display: block; 
            margin: 8px 0; 
            cursor: pointer;
            width: 100%;
        }
        h1 { 
            color: #2c3e50; 
            border-bottom: 2px solid #eee; 
            padding-bottom: 10px; 
            margin-top: 0;
        }
        h3 {
            margin-top: 0;
            margin-bottom: 15px;
            color: #007bff;
        }
        button { 
            background: #3498db; 
            color: white; 
            border: none; 
            padding: 12px 20px; 
            font-size: 16px; 
            border-radius: 5px; 
            cursor: pointer; 
            transition: background 0.3s;
            margin-top: 20px;
        }
        button:hover { 
            background: #2980b9; 
        }
        button:disabled {
            background: #95a5a6;
            cursor: not-allowed;
        }
        .required { 
            color: #e74c3c; 
        }
        .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;
        }
        .erro-validacao {
            border-color: #e74c3c !important;
            background: #ffe6e6 !important;
            box-shadow: 0 0 0 2px rgba(231, 76, 60, 0.1);
        }
        input[type="text"] {
            width: 100%;
            padding: 10px;
            border: 1px solid #ddd;
            border-radius: 4px;
            box-sizing: border-box;
        }
        input[type="radio"], input[type="checkbox"] {
            margin-right: 10px;
            transform: scale(1.2);
        }
        .info-formulario {
            background: #e7f3ff;
            border: 1px solid #b3d9ff;
            border-radius: 6px;
            padding: 15px;
            margin-bottom: 20px;
        }
        .info-formulario h3 {
            margin-top: 0;
            color: #0066cc;
        }
        .progresso-container {
            margin-bottom: 20px;
            background: #f8f9fa;
            padding: 10px;
            border-radius: 6px;
        }
        .progresso-bar {
            height: 10px;
            background: #dee2e6;
            border-radius: 5px;
            overflow: hidden;
        }
        .progresso-fill {
            height: 100%;
            background: #28a745;
            transition: width 0.3s ease;
        }
        .progresso-texto {
            text-align: center;
            margin-top: 5px;
            font-size: 14px;
            color: #666;
        }
        .log-info {
            font-size: 12px;
            color: #666;
            text-align: right;
            margin-top: 10px;
            font-style: italic;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1><?= htmlspecialchars($formulario['nome']) ?></h1>
        
        <div class="info-formulario">
            <h3>Instruções</h3>
            <?php if (!empty($formulario['descricao'])): ?>
                <p><?= htmlspecialchars($formulario['descricao']) ?></p>
            <?php endif; ?>
            <p>Por favor, responda todas as perguntas obrigatórias antes de enviar o formulário.</p>
            <div class="log-info">
                <i class="fas fa-history"></i> Suas ações estão sendo registradas para auditoria.
            </div>
        </div>

        <div class="progresso-container">
            <div class="progresso-bar">
                <div class="progresso-fill" id="progressoFill" style="width: 0%"></div>
            </div>
            <div class="progresso-texto" id="progressoTexto">0% completo</div>
        </div>

        <form method="POST" id="formFormulario" novalidate>
            <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($_SESSION['csrf_token']) ?>">
            <div id="perguntasContainer">
                <?php 
                $pergunta_numero = 1;
                echo renderizarPerguntasRecursivo($perguntas, $pergunta_numero);
                ?>
            </div>

            <button type="submit" id="submitBtn">Enviar Respostas</button>
            <div class="log-info">
                <i class="fas fa-shield-alt"></i> Protegido por validação de segurança
            </div>
        </form>
    </div>

    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
    $(document).ready(function() {
        console.log('=== INICIANDO formulário ===');
        
        // Função para mostrar/esconder condicionais
        function toggleConditionalQuestions() {
            console.log('Atualizando condicionais...');
            
            // Remover required de TODAS as condicionais
            $('.pergunta-condicional').each(function() {
                $(this).find('input[type="text"]').removeAttr('required');
                $(this).find('input[type="radio"]').removeAttr('required');
                $(this).find('input[type="checkbox"]').removeAttr('required');
            });
            
            // Esconder todas as condicionais
            $('.pergunta-condicional').hide();
            
            // Mostrar apenas as condicionais das respostas selecionadas
            $('.input-resposta:checked').each(function() {
                const respostaId = $(this).data('resposta-id');
                console.log('Resposta selecionada ID:', respostaId);
                
                if (!respostaId) return;

                const condicionais = $(`.pergunta-condicional[data-condicional-de="${respostaId}"]`);
                console.log('Condicionais encontradas para resposta ' + respostaId + ':', condicionais.length);
                
                condicionais.each(function() {
                    $(this).show();
                    const obrigatoria = $(this).data('obrigatoria') == '1';
                    console.log('Mostrando condicional ID:', $(this).data('pergunta-id'), 'Obrigatória:', obrigatoria);
                    
                    if (obrigatoria) {
                        // Para campos de texto
                        $(this).find('input[type="text"]').prop('required', true);
                        
                        // Para radios - adicionar required apenas se nenhum estiver selecionado
                        const radios = $(this).find('input[type="radio"]');
                        if (radios.length > 0) {
                            const grupoName = radios.attr('name');
                            if (!$(`input[name="${grupoName}"]:checked`).length) {
                                radios.first().prop('required', true);
                            }
                        }
                    }
                });
            });
            
            aplicarEstilosObrigatoriedade();
            atualizarProgresso();
        }

        // Aplicar estilos baseados na obrigatoriedade
        function aplicarEstilosObrigatoriedade() {
            $('.pergunta').each(function() {
                const isObrigatoria = $(this).data('obrigatoria') == '1';
                const nivel = parseInt($(this).data('nivel')) || 0;
                const isVisible = $(this).is(':visible');
                
                if (isObrigatoria && isVisible) {
                    $(this).css('border-left', '4px solid #e74c3c');
                    $(this).css('background', nivel > 0 ? '#ffe6e6' : '#fff5f5');
                } else if (isObrigatoria && !isVisible) {
                    $(this).css('border-left', '4px solid #ccc');
                    $(this).css('background', nivel > 0 ? '#f8f9fa' : '#f8f9fa');
                } else {
                    $(this).css('border-left', '4px solid #f39c12');
                    $(this).css('background', nivel > 0 ? '#fffaf0' : '#fffaf0');
                }
            });
        }

        // Calcular progresso de preenchimento
        function atualizarProgresso() {
            const totalPerguntasVisiveis = $('.pergunta:visible').length;
            if (totalPerguntasVisiveis === 0) return;
            
            let respondidas = 0;
            
            $('.pergunta:visible').each(function() {
                const perguntaId = $(this).data('pergunta-id');
                let respondida = false;
                
                // Verificar radios
                const radios = $(this).find('input[type="radio"]');
                if (radios.length > 0) {
                    const nomeRadio = radios.attr('name');
                    respondida = $(`input[name="${nomeRadio}"]:checked`).length > 0;
                }
                
                // Verificar checkboxes
                if (!respondida) {
                    const checkboxes = $(this).find('input[type="checkbox"]');
                    if (checkboxes.length > 0) {
                        respondida = $(`input[name^="respostas[${perguntaId}]"]:checked`).length > 0;
                    }
                }
                
                // Verificar texto
                if (!respondida) {
                    const texto = $(this).find('input[type="text"]');
                    if (texto.length > 0) {
                        respondida = texto.val().trim() !== '';
                    }
                }
                
                if (respondida) respondidas++;
            });
            
            const percentual = totalPerguntasVisiveis > 0 ? Math.round((respondidas / totalPerguntasVisiveis) * 100) : 0;
            $('#progressoFill').css('width', percentual + '%');
            $('#progressoTexto').text(percentual + '% completo (' + respondidas + '/' + totalPerguntasVisiveis + ' perguntas)');
        }

        // Adicionar listeners para inputs
        $('body').on('change input', '.input-resposta, input[type="text"]', function() {
            toggleConditionalQuestions();
        });

        // Executar inicialmente
        aplicarEstilosObrigatoriedade();
        toggleConditionalQuestions();
        
        // DEBUG: Mostrar estrutura inicial
        console.log('Total de perguntas:', $('.pergunta').length);
        console.log('Total de condicionais:', $('.pergunta-condicional').length);

        // Validação do formulário
        $('#formFormulario').on('submit', function(e) {
            e.preventDefault();
            
            console.log('\n=== VALIDAÇÃO INICIADA ===');
            let valido = true;
            let erros = [];
            
            // Resetar estilos de erro
            $('.pergunta').removeClass('erro-validacao');
            
            // Validar todas as perguntas VISÍVEIS
            $('.pergunta:visible').each(function() {
                const elemento = $(this);
                const obrigatoria = elemento.data('obrigatoria') == '1';
                const nivel = parseInt(elemento.data('nivel')) || 0;
                const condicionalDe = elemento.data('condicional-de');
                
                console.log(`Validando: ID ${elemento.data('pergunta-id')}, Nível ${nivel}, Obrigatória ${obrigatoria}, CondicionalDe ${condicionalDe}`);
                
                // Verificar se deve validar
                let deveValidar = true;
                
                if (nivel > 0 && condicionalDe) {
                    // É uma pergunta condicional, verificar se a resposta pai está selecionada
                    const paiSelecionado = $(`input[data-resposta-id="${condicionalDe}"]:checked`).length > 0;
                    if (!paiSelecionado) {
                        deveValidar = false;
                        console.log(`  -> Não validar: resposta pai ${condicionalDe} não selecionada`);
                    }
                }
                
                if (obrigatoria && deveValidar) {
                    const perguntaId = elemento.data('pergunta-id');
                    let respondida = false;
                    
                    // Verificar radios
                    const radios = elemento.find('input[type="radio"]');
                    if (radios.length > 0) {
                        const nomeRadio = radios.attr('name');
                        respondida = $(`input[name="${nomeRadio}"]:checked`).length > 0;
                    }
                    
                    // Verificar checkboxes
                    if (!respondida) {
                        const checkboxes = elemento.find('input[type="checkbox"]');
                        if (checkboxes.length > 0) {
                            respondida = $(`input[name^="respostas[${perguntaId}]"]:checked`).length > 0;
                        }
                    }
                    
                    // Verificar texto
                    if (!respondida) {
                        const texto = elemento.find('input[type="text"]');
                        if (texto.length > 0) {
                            respondida = texto.val().trim() !== '';
                        }
                    }
                    
                    console.log(`  -> Respondida: ${respondida}`);
                    
                    if (!respondida) {
                        valido = false;
                        const perguntaTexto = elemento.find('h3').text()
                            .replace('*', '')
                            .replace(/(Obrigatória|Opcional)/g, '')
                            .trim();
                        
                        erros.push(perguntaTexto);
                        elemento.addClass('erro-validacao');
                    }
                }
            });
            
            if (!valido) {
                Swal.fire({
                    icon: 'warning',
                    title: 'Campos obrigatórios',
                    html: 'Por favor, responda as seguintes perguntas obrigatórias:<br><br>' + 
                          erros.map(erro => `• ${erro}`).join('<br>'),
                    confirmButtonText: 'Entendi'
                }).then(() => {
                    const primeiroErro = $('.erro-validacao').first();
                    if (primeiroErro.length) {
                        $('html, body').animate({
                            scrollTop: primeiroErro.offset().top - 100
                        }, 500);
                    }
                });
            } else {
                Swal.fire({
                    title: 'Enviar respostas?',
                    text: 'Você não poderá alterar as respostas após o envio.',
                    icon: 'question',
                    showCancelButton: true,
                    confirmButtonColor: '#28a745',
                    cancelButtonColor: '#6c757d',
                    confirmButtonText: 'Sim, enviar!',
                    cancelButtonText: 'Cancelar'
                }).then((result) => {
                    if (result.isConfirmed) {
                        $('#submitBtn').prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i> Enviando...');
                        
                        // Remover required de elementos ocultos antes do envio
                        $('.pergunta-condicional:hidden').find('[required]').removeAttr('required');
                        
                        // Enviar formulário
                        document.getElementById('formFormulario').submit();
                    }
                });
            }
        });
        
        // Monitorar mudanças para atualizar progresso
        $('body').on('change input', 'input', function() {
            atualizarProgresso();
        });
        
        // Inicializar progresso
        atualizarProgresso();
    });
    </script>
</body>
</html>