<?php
session_start();

// === CSRF helper (multi-token, one-time use) ===
if (!isset($_SESSION['csrf_tokens']) || !is_array($_SESSION['csrf_tokens'])) {
    $_SESSION['csrf_tokens'] = [];
}
function csrf_gc($ttl = 7200) {
    $now = time();
    foreach ($_SESSION['csrf_tokens'] as $t => $ts) {
        if ($now - (int)$ts > $ttl) {
            unset($_SESSION['csrf_tokens'][$t]);
        }
    }
}
function csrf_issue($ttl = 7200) {
    csrf_gc($ttl);
    $token = bin2hex(random_bytes(32));
    $_SESSION['csrf_tokens'][$token] = time();
    return $token;
}
function csrf_validate($token, $ttl = 7200, $consume = true) {
    csrf_gc($ttl);
    if (!$token) return false;
    if (!isset($_SESSION['csrf_tokens'][$token])) return false;
    $age = time() - (int)$_SESSION['csrf_tokens'][$token];
    $ok = $age <= $ttl;
    // One-time use by default; if $consume is false, leave token for reuse until TTL
    if ($consume) {
        unset($_SESSION['csrf_tokens'][$token]);
    }
    return $ok && $age >= 0;
}
function csrf_header_token() {
    $headers = function_exists('getallheaders') ? getallheaders() : [];
    $token = $headers['X-CSRF-Token'] ?? $headers['X-Csrf-Token'] ?? ($_SERVER['HTTP_X_CSRF_TOKEN'] ?? null);
    return $token;
}
// ================================================
require_once 'conexao.php';

$csrf_token = csrf_issue();

$id = $_GET['id'] ?? null;
$nome = '';
$tipo = 'email';
$nota_minima = '7.0';

if ($id && !ctype_digit($id)) {
    die("ID inválido");
}

if ($id) {
    $stmt = $conn->prepare("SELECT * FROM formularios WHERE id = ?");
    $stmt->bind_param("i", $id);
    $stmt->execute();
    $resultado = $stmt->get_result()->fetch_assoc();
    if ($resultado) {
        $nome = $resultado['nome'];
        $tipo = $resultado['tipo'] ?? 'email';
        $nota_minima = $resultado['nota_minima'] ?? '7.0';
    } else {
        die("Registro não encontrado");
    }
}
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?= $id ? 'Editar' : 'Novo' ?> Formulário</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" />
    <style>
        .hidden {
            display: none;
        }
    </style>
</head>
<body>
<div class="container py-5">
    <h3><?= $id ? 'Editar' : 'Novo' ?> Formulário</h3>
    <form id="formFormulario">
        <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($csrf_token) ?>" />
        <input type="hidden" name="id" value="<?= htmlspecialchars($id) ?>" />

        <div class="mb-3">
            <label for="nome" class="form-label">Nome *</label>
            <input type="text" id="nome" name="nome" class="form-control" value="<?= htmlspecialchars($nome) ?>" required maxlength="255" />
        </div>

        <div class="mb-3">
            <label for="tipo" class="form-label">Tipo *</label>
            <select id="tipo" name="tipo" class="form-control" required>
                <option value="email" <?= $tipo === 'email' ? 'selected' : '' ?>>E-mail</option>
                <option value="questionario" <?= $tipo === 'questionario' ? 'selected' : '' ?>>Questionário</option>
            </select>
        </div>

        <div class="mb-3 <?= $tipo === 'questionario' ? '' : 'hidden' ?>" id="nota-minima-container">
            <label for="nota_minima" class="form-label">Nota Mínima para Aprovação</label>
            <input type="number" id="nota_minima" name="nota_minima" class="form-control" step="0.1" min="0" value="<?= htmlspecialchars($nota_minima) ?>" />
            <div class="form-text">Defina a nota mínima necessária para aprovação no questionário.</div>
        </div>

        <button type="button" id="salvar-btn" class="btn btn-primary">📃 Salvar Formulário</button>
        <a href="formulario.php" class="btn btn-secondary">← Voltar</a>
    </form>

    <div id="mensagem" class="mt-3"></div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Mostrar/ocultar campo de nota mínima baseado no tipo
    document.getElementById('tipo').addEventListener('change', function() {
        const notaContainer = document.getElementById('nota-minima-container');
        if (this.value === 'questionario') {
            notaContainer.classList.remove('hidden');
        } else {
            notaContainer.classList.add('hidden');
        }
    });

    // Botão salvar
    document.getElementById('salvar-btn').addEventListener('click', function () {
        const form = document.getElementById('formFormulario');
        const formData = new FormData(form);
        const id = formData.get('id');
        
        // Determinar a URL correta
        const url = id ? 'formulario_atualizar.php' : 'formulario_salvar.php';
        
        // Capturar dados do formulário
        const tipo = document.getElementById('tipo').value;
        const notaMinima = tipo === 'questionario' ? document.getElementById('nota_minima').value : null;

        fetch(url, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'X-CSRF-Token': formData.get('csrf_token')
            },
            body: JSON.stringify({
                id: id,
                nome: formData.get('nome'),
                tipo: tipo,
                nota_minima: notaMinima
            })
        })
        .then(response => response.json())
        .then(data => {
            const mensagemEl = document.getElementById('mensagem');
            if (data.status === 'sucesso') {
                mensagemEl.innerHTML = '<div class="alert alert-success">Formulário salvo com sucesso! ID: ' + data.formulario_id + '</div>';
                // Redirecionar após 2 segundos
                setTimeout(() => {
                    window.location.href = 'formulario.php';
                }, 2000);
            } else {
                mensagemEl.innerHTML = '<div class="alert alert-danger">Erro: ' + data.mensagem + '</div>';
            }
        })
        .catch((error) => {
            console.error('Erro:', error);
            document.getElementById('mensagem').innerHTML = '<div class="alert alert-danger">Erro desconhecido: ' + error.message + '</div>';
        });
    });
});
</script>
</body>
</html>