<?php
session_start();
require_once 'conexao.php';

// Verificar se o usuário está logado
if (!isset($_SESSION['logado'])) {
    http_response_code(401);
    echo json_encode(['status' => 'erro', 'mensagem' => 'Não autorizado']);
    exit;
}

$tenant_id = $_SESSION['tenant_id'] ?? null;
if (!$tenant_id || !is_numeric($tenant_id)) {
    http_response_code(400);
    echo json_encode(['status' => 'erro', 'mensagem' => 'Tenant não identificado']);
    exit;
}

if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
    http_response_code(400);
    echo json_encode(['status' => 'erro', 'mensagem' => 'ID do formulário não especificado']);
    exit;
}

$formulario_id = $_GET['id'];

try {
    // Buscar formulário
    $stmt = $conn->prepare("SELECT id, nome, tipo, nota_minima FROM formularios WHERE id = ? AND tenant_id = ?");
    $stmt->bind_param("ii", $formulario_id, $tenant_id);
    $stmt->execute();
    $result = $stmt->get_result();
    
    if ($result->num_rows === 0) {
        http_response_code(404);
        echo json_encode(['status' => 'erro', 'mensagem' => 'Formulário não encontrado']);
        exit;
    }
    
    $formulario = $result->fetch_assoc();
    $stmt->close();

    // Buscar perguntas (apenas raiz primeiro)
    $perguntas = [];
    $stmt = $conn->prepare("
        SELECT id, texto, tipo, parent_resposta_id, parent_pergunta_id, ordem 
        FROM perguntas 
        WHERE formulario_id = ? AND parent_resposta_id IS NULL
        ORDER BY ordem
    ");
    $stmt->bind_param("i", $formulario_id);
    $stmt->execute();
    $result = $stmt->get_result();
    
    while ($pergunta = $result->fetch_assoc()) {
        $perguntaData = [
            'id' => $pergunta['id'],
            'texto' => $pergunta['texto'],
            'tipo' => $pergunta['tipo'],
            'parent_id' => $pergunta['parent_resposta_id'],
            'ordem' => $pergunta['ordem']
        ];
        
        // Buscar opções de resposta se não for pergunta aberta
        if ($pergunta['tipo'] !== 'texto') {
            $perguntaData['respostas'] = [];
            
            $stmt2 = $conn->prepare("
                SELECT id, texto, pontuacao, ordem 
                FROM opcoes_respostas 
                WHERE pergunta_id = ? 
                ORDER BY ordem
            ");
            $stmt2->bind_param("i", $pergunta['id']);
            $stmt2->execute();
            $result2 = $stmt2->get_result();
            
            while ($resposta = $result2->fetch_assoc()) {
                $respostaData = [
                    'id' => $resposta['id'],
                    'texto' => $resposta['texto'],
                    'pontuacao' => $resposta['pontuacao'],
                    'ordem' => $resposta['ordem']
                ];
                
                // Buscar perguntas condicionais para esta resposta
                $stmt3 = $conn->prepare("
                    SELECT id, texto, tipo, ordem 
                    FROM perguntas 
                    WHERE parent_resposta_id = ? 
                    ORDER BY ordem
                ");
                $stmt3->bind_param("i", $resposta['id']);
                $stmt3->execute();
                $result3 = $stmt3->get_result();
                
                if ($result3->num_rows > 0) {
                    $respostaData['condicionais'] = [];
                    while ($condicional = $result3->fetch_assoc()) {
                        $condicionalData = [
                            'id' => $condicional['id'],
                            'texto' => $condicional['texto'],
                            'tipo' => $condicional['tipo'],
                            'parent_id' => $resposta['id'],
                            'ordem' => $condicional['ordem']
                        ];
                        
                        // Para perguntas condicionais que também têm respostas, buscar recursivamente
                        if ($condicional['tipo'] !== 'texto') {
                            $condicionalData['respostas'] = buscarRespostasPergunta($conn, $condicional['id']);
                        }
                        
                        $respostaData['condicionais'][] = $condicionalData;
                    }
                }
                $stmt3->close();
                
                $perguntaData['respostas'][] = $respostaData;
            }
            $stmt2->close();
        }
        
        $perguntas[] = $perguntaData;
    }
    $stmt->close();

    // Função auxiliar para buscar respostas de uma pergunta
    function buscarRespostasPergunta($conn, $pergunta_id) {
        $respostas = [];
        $stmt = $conn->prepare("
            SELECT id, texto, pontuacao, ordem 
            FROM opcoes_respostas 
            WHERE pergunta_id = ? 
            ORDER BY ordem
        ");
        $stmt->bind_param("i", $pergunta_id);
        $stmt->execute();
        $result = $stmt->get_result();
        
        while ($resposta = $result->fetch_assoc()) {
            $respostaData = [
                'id' => $resposta['id'],
                'texto' => $resposta['texto'],
                'pontuacao' => $resposta['pontuacao'],
                'ordem' => $resposta['ordem']
            ];
            
            // Verificar se esta resposta tem perguntas condicionais
            $stmt2 = $conn->prepare("
                SELECT id, texto, tipo, ordem 
                FROM perguntas 
                WHERE parent_resposta_id = ? 
                ORDER BY ordem
            ");
            $stmt2->bind_param("i", $resposta['id']);
            $stmt2->execute();
            $result2 = $stmt2->get_result();
            
            if ($result2->num_rows > 0) {
                $respostaData['condicionais'] = [];
                while ($condicional = $result2->fetch_assoc()) {
                    $condicionalData = [
                        'id' => $condicional['id'],
                        'texto' => $condicional['texto'],
                        'tipo' => $condicional['tipo'],
                        'parent_id' => $resposta['id'],
                        'ordem' => $condicional['ordem']
                    ];
                    
                    if ($condicional['tipo'] !== 'texto') {
                        $condicionalData['respostas'] = buscarRespostasPergunta($conn, $condicional['id']);
                    }
                    
                    $respostaData['condicionais'][] = $condicionalData;
                }
            }
            $stmt2->close();
            
            $respostas[] = $respostaData;
        }
        $stmt->close();
        
        return $respostas;
    }

    echo json_encode([
        'status' => 'sucesso',
        'formulario' => [
            'id' => $formulario['id'],
            'nome' => $formulario['nome'],
            'tipo' => $formulario['tipo'],
            'nota_minima' => $formulario['nota_minima'],
            'perguntas' => $perguntas
        ],
        'csrf_token' => csrf_issue()
    ]);

} catch (Exception $e) {
    error_log("Erro ao carregar formulário: " . $e->getMessage());
    http_response_code(500);
    echo json_encode(['status' => 'erro', 'mensagem' => 'Erro interno do servidor: ' . $e->getMessage()]);
}
?>