<?php
session_start();

// Verificar login e tenant
if (!isset($_SESSION['logado'], $_SESSION['usuario_id'], $_SESSION['tenant_id']) || $_SESSION['logado'] !== true) {
    header('Location: login.php');
    exit;
}

// Verificar tenant_id
$tenant_id = $_SESSION['tenant_id'] ?? null;
if (!$tenant_id) {
    die("Tenant não identificado.");
}

// CSRF token
if (!isset($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

// Conexão com o banco de dados
require_once 'conexao.php';

// Verificar se foi passado um ID válido
$funil_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
if ($funil_id <= 0) {
    $_SESSION['erro'] = "Funil não especificado.";
    header('Location: funis.php');
    exit;
}

// Obter informações do funil
$stmt = $conn->prepare("SELECT * FROM funis WHERE id = ? AND tenant_id = ?");
$stmt->bind_param("ii", $funil_id, $tenant_id);
$stmt->execute();
$result = $stmt->get_result();
$funil = $result->fetch_assoc();

if (!$funil) {
    $_SESSION['erro'] = "Funil não encontrado ou você não tem permissão para editá-lo.";
    header('Location: funis.php');
    exit;
}

// Obter etapas do funil
$etapas = [];
$stmt = $conn->prepare("SELECT * FROM etapas_funis WHERE funil_id = ? ORDER BY ordem ASC");
$stmt->bind_param("i", $funil_id);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    $etapas[] = $row;
}

// Obter formulários disponíveis do tipo 'funil'
$formularios = [];
$stmt_formularios = $conn->prepare("SELECT id, nome FROM formularios WHERE tenant_id = ? AND tipo = 'questionario' ORDER BY nome ASC");
$stmt_formularios->bind_param("i", $tenant_id);
$stmt_formularios->execute();
$result_formularios = $stmt_formularios->get_result();
while ($row = $result_formularios->fetch_assoc()) {
    $formularios[$row['id']] = $row;
}

// Processar atualização do funil
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['atualizar_funil'])) {
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        $_SESSION['erro'] = "Token de segurança inválido!";
        header("Location: funis.php");
        exit;
    }

    $nome_funil = trim($_POST['nome_funil']);
    $novas_etapas = $_POST['etapas'] ?? [];
    $tipos_entrada = $_POST['tipos_entrada'] ?? [];
    $formularios_ids = $_POST['formularios_ids'] ?? [];
    $etapas_removidas = isset($_POST['etapas_removidas']) ? explode(',', $_POST['etapas_removidas']) : [];

    if (empty($nome_funil)) {
        $_SESSION['erro'] = "O nome do funil é obrigatório.";
    } else {
        // Filtrar etapas vazias
        $etapas_validas = array_filter($novas_etapas, function($etapa) {
            return !empty(trim($etapa['nome']));
        });

        if (empty($etapas_validas)) {
            $_SESSION['erro'] = "Adicione pelo menos uma etapa válida.";
        } else {
            $conn->begin_transaction();
            try {
                // Atualizar nome do funil
                $stmt = $conn->prepare("UPDATE funis SET nome = ? WHERE id = ? AND tenant_id = ?");
                $stmt->bind_param("sii", $nome_funil, $funil_id, $tenant_id);
                $stmt->execute();

                // Remover etapas marcadas para exclusão
                if (!empty($etapas_removidas)) {
                    $placeholders = implode(',', array_fill(0, count($etapas_removidas), '?'));
                    $types = str_repeat('i', count($etapas_removidas));
                    
                    $stmt = $conn->prepare("DELETE FROM etapas_funis WHERE id IN ($placeholders) AND funil_id = ?");
                    $params = array_merge($etapas_removidas, [$funil_id]);
                    $stmt->bind_param($types . 'i', ...$params);
                    $stmt->execute();
                }

                // Atualizar ou inserir etapas
                foreach ($novas_etapas as $index => $etapa) {
                    if (empty(trim($etapa['nome']))) continue;
                    
                    $tipo_entrada = $tipos_entrada[$index] ?? 'manual';
                    $formulario_id = ($tipo_entrada === 'questionario' && isset($formularios_ids[$index]) && !empty($formularios_ids[$index])) ? intval($formularios_ids[$index]) : null;

                    if (isset($etapa['id']) && $etapa['id'] > 0) {
                        // Atualizar etapa existente
                        $stmt = $conn->prepare("UPDATE etapas_funis SET nome = ?, ordem = ?, tipo_entrada = ?, questionario_id = ? WHERE id = ? AND funil_id = ?");
                        $stmt->bind_param("sisiii", $etapa['nome'], $etapa['ordem'], $tipo_entrada, $formulario_id, $etapa['id'], $funil_id);
                    } else {
                        // Inserir nova etapa
                        $stmt = $conn->prepare("INSERT INTO etapas_funis (funil_id, nome, ordem, tipo_entrada, questionario_id) VALUES (?, ?, ?, ?, ?)");
                        $stmt->bind_param("isisi", $funil_id, $etapa['nome'], $etapa['ordem'], $tipo_entrada, $formulario_id);
                    }
                    $stmt->execute();
                }

                $conn->commit();

                $_SESSION['mensagem'] = "Funil atualizado com sucesso!";
                header("Location: funis.php?funil=$funil_id");
                exit;
            } catch (Exception $e) {
                $conn->rollback();
                $_SESSION['erro'] = "Erro ao atualizar funil: " . $e->getMessage();
                header("Location: editar_funil.php?id=$funil_id");
                exit;
            }
        }
    }
}

$conn->close();
?>
<!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>SON - Editar Funil</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">
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
            background-color: #f5f5f5;
            overflow-x: hidden;
        }
        
      
        
        .sidebar {
            position: fixed;
            left: 0;
            top: 70px;
            height: calc(100vh - 70px);
            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:hover {
            width: 250px;
        }
        
        .sidebar ul {
            list-style: none;
            padding: 0;
            margin: 0;
        }
        
        .sidebar li {
            padding: 0;
            margin: 0;
        }
        
        .sidebar a {
            display: flex;
            align-items: center;
            padding: 15px 20px;
            text-decoration: none;
            color: #333;
            white-space: nowrap;
        }
        
        .sidebar a:hover {
            background-color: #f0f0f0;
        }
        
        .sidebar i {
            margin-right: 15px;
            min-width: 20px;
            text-align: center;
        }
        
        .sidebar span {
            display: none;
        }
        
        .sidebar:hover span {
            display: inline;
        }
        
        .main-content {
            margin-left: 60px;
            padding: 30px;
            transition: margin-left 0.3s ease;
            position: relative;
            z-index: 1;
            background-color: #f5f5f5;
            min-height: calc(5vh - 20px);
        }
        
    .content-wrapper {
            margin-top: 100px;
            padding: 20px;
        }
        .container {
            max-width: 1000px;
            margin: 0 auto;
            background: white;
            padding: 30px;
            border-radius: 8px;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        }
        
        h1 {
            color: #333;
            border-bottom: 1px solid #eee;
            padding-bottom: 10px;
            display: flex;
            align-items: center;
            gap: 10px;
        }
        
        .btn {
            padding: 10px 20px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
            font-weight: bold;
            margin-right: 10px;
            text-decoration: none;
            display: inline-block;
            transition: background-color 0.3s;
        }
        
        .btn-primary {
            background-color: #007bff;
            color: white;
        }
        
        .btn-success {
            background-color: #28a745;
            color: white;
        }
        
        .btn-danger {
            background-color: #dc3545;
            color: white;
        }
        
        .btn:hover {
            opacity: 0.9;
        }
        
        .form-group {
            margin-bottom: 15px;
        }
        
        .form-group label {
            display: block;
            margin-bottom: 5px;
            font-weight: bold;
        }
        
        .form-group input {
            width: 100%;
            padding: 10px;
            border: 1px solid #ddd;
            border-radius: 4px;
            font-size: 16px;
        }
        
        #etapas-container {
            margin-top: 10px;
        }
        
        .etapa-input {
            display: flex;
            margin-bottom: 10px;
            gap: 10px;
            align-items: center;
        }
        
        .etapa-input input {
            flex-grow: 1;
            padding: 8px;
            border: 1px solid #ddd;
            border-radius: 4px;
        }
        
        .etapa-input select {
            padding: 8px;
            border: 1px solid #ddd;
            border-radius: 4px;
            width: 150px;
        }
        
        .formulario-select {
            width: 200px;
            display: none;
        }
        
        .etapa-ordem {
            background: #007bff;
            color: white;
            border-radius: 50%;
            width: 24px;
            height: 24px;
            display: flex;
            align-items: center;
            justify-content: center;
            margin-right: 10px;
            font-size: 12px;
            flex-shrink: 0;
        }
        
        .required:after {
            content: " *";
            color: red;
        }
        
        .alert {
            padding: 15px;
            margin-bottom: 20px;
            border-radius: 4px;
        }
        
        .alert-success {
            background-color: #d4edda;
            color: #155724;
            border: 1px solid #c3e6cb;
        }
        
        .alert-danger {
            background-color: #f8d7da;
            color: #721c24;
            border: 1px solid #f5c6cb;
        }
        
        .user-info {
            display: flex;
            align-items: center;
            gap: 10px;
        }
        
        .user-photo {
            width: 40px;
            height: 40px;
            border-radius: 50%;
        }
        
        .user-initial {
            width: 40px;
            height: 40px;
            border-radius: 50%;
            background: #ccc;
            display: flex;
            align-items: center;
            justify-content: center;
            font-weight: bold;
            font-size: 1.2em;
        }
        
        @media (max-width: 768px) {
            .etapa-input {
                flex-direction: column;
            }
            
            .etapa-input select {
                width: 100%;
            }
            
            .formulario-select {
                width: 100%;
            }
            
            .sidebar {
                width: 0;
            }
            
            .sidebar:hover {
                width: 200px;
            }
            
            .main-content {
                margin-left: 0;
                padding: 80px 15px 15px 15px;
            }
        }
    </style>
</head>
<body>


    <!-- Menu Lateral -->
    <?php include 'menu_lateral.php'; ?>
    
    <!-- Conteúdo Principal -->
    <div class="main-content">
        <div class="container">
            <h1><i class="fas fa-funnel-dollar"></i> Editar Funil: <?= htmlspecialchars($funil['nome']) ?></h1>
            
            <?php if (isset($_SESSION['erro'])): ?>
                <div class="alert alert-danger">
                    <?= htmlspecialchars($_SESSION['erro']) ?>
                </div>
                <?php unset($_SESSION['erro']); ?>
            <?php endif; ?>

            <?php if (isset($_SESSION['mensagem'])): ?>
                <div class="alert alert-success"><?php echo $_SESSION['mensagem']; unset($_SESSION['mensagem']); ?></div>
            <?php endif; ?>

            <form method="POST">
                <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($_SESSION['csrf_token']) ?>">
                
                <div class="form-group">
                    <label for="nome_funil" class="required">Nome do Funil:</label>
                    <input type="text" id="nome_funil" name="nome_funil" value="<?= htmlspecialchars($funil['nome']) ?>" required />
                </div>

                <div class="form-group">
                    <label class="required">Etapas do Funil:</label>
                    <div id="etapas-container">
                        <?php foreach ($etapas as $index => $etapa): ?>
                            <div class="etapa-input">
                                <input type="hidden" name="etapas[<?= $index ?>][id]" value="<?= $etapa['id'] ?>">
                                <input type="hidden" name="etapas[<?= $index ?>][ordem]" value="<?= $etapa['ordem'] ?>">
                                <div class="etapa-ordem"><?= $etapa['ordem'] ?></div>
                                <input type="text" name="etapas[<?= $index ?>][nome]" value="<?= htmlspecialchars($etapa['nome']) ?>" placeholder="Nome da etapa" required>
                                
                                <select name="tipos_entrada[<?= $index ?>]" class="tipo-entrada-select" onchange="toggleFormularioSelect(this, <?= $index ?>)">
                                    <option value="manual" <?= $etapa['tipo_entrada'] === 'manual' ? 'selected' : '' ?>>Manual</option>
                                    <option value="agendamento" <?= $etapa['tipo_entrada'] === 'agendamento' ? 'selected' : '' ?>>Agendamento</option>
                                    <option value="questionario" <?= $etapa['tipo_entrada'] === 'questionario' ? 'selected' : '' ?>>Questionário</option>
                                </select>
                                
                                <select name="formularios_ids[<?= $index ?>]" class="formulario-select" id="formulario-<?= $index ?>" style="<?= $etapa['tipo_entrada'] === 'questionario' ? 'display: block;' : 'display: none;' ?>">
                                    <option value="">Selecione um formulário</option>
                                    <?php foreach ($formularios as $id => $formulario): ?>
                                        <option value="<?= $id ?>" <?= $etapa['questionario_id'] == $id ? 'selected' : '' ?>>
                                            <?= htmlspecialchars($formulario['nome']) ?>
                                        </option>
                                    <?php endforeach; ?>
                                </select>
                                
                                <button type="button" class="btn btn-danger" onclick="marcarParaRemocao(this, <?= $etapa['id'] ?>)">
                                    <i class="fas fa-times"></i>
                                </button>
                            </div>
                        <?php endforeach; ?>
                    </div>
                    <input type="hidden" id="etapas_removidas" name="etapas_removidas" value="">
                    <button type="button" class="btn btn-primary" onclick="adicionarEtapa()">
                        <i class="fas fa-plus"></i> Adicionar Etapa
                    </button>
                </div>

                <button type="submit" name="atualizar_funil" class="btn btn-success">
                    <i class="fas fa-save"></i> Salvar Alterações
                </button>
                <a href="funis.php" class="btn btn-danger">
                    <i class="fas fa-times"></i> Cancelar
                </a>
            </form>
        </div>
    </div>

    <script>
        // Contador para novas etapas
        let etapaCounter = <?= count($etapas) ?>;
        let etapasRemovidas = [];
        
        // Função para adicionar etapas ao formulário
        function adicionarEtapa() {
            const container = document.getElementById('etapas-container');
            
            // Usar um índice único para novas etapas
            const index = etapaCounter++;
            
            const div = document.createElement('div');
            div.className = 'etapa-input';
            div.innerHTML = `
                <input type="hidden" name="etapas[${index}][id]" value="0">
                <input type="hidden" name="etapas[${index}][ordem]" value="${index + 1}">
                <div class="etapa-ordem">${index + 1}</div>
                <input type="text" name="etapas[${index}][nome]" placeholder="Nome da etapa" required>
                
                <select name="tipos_entrada[${index}]" class="tipo-entrada-select" onchange="toggleFormularioSelect(this, ${index})">
                    <option value="manual">Manual</option>
                    <option value="agendamento">Agendamento</option>
                    <option value="questionario">Questionário</option>
                </select>
                
                <select name="formularios_ids[${index}]" class="formulario-select" id="formulario-${index}" style="display: none;">
                    <option value="">Selecione um formulário</option>
                    <?php foreach ($formularios as $id => $formulario): ?>
                        <option value="<?= $id ?>"><?= htmlspecialchars($formulario['nome']) ?></option>
                    <?php endforeach; ?>
                </select>
                
                <button type="button" class="btn btn-danger" onclick="this.parentElement.remove(); reordenarEtapas();">
                    <i class="fas fa-times"></i>
                </button>
            `;
            container.appendChild(div);
        }
        
        // Função para mostrar/ocultar seletor de formulário
        function toggleFormularioSelect(select, index) {
            const formularioSelect = document.getElementById('formulario-' + index);
            
            if (select.value === 'questionario') {
                formularioSelect.style.display = 'block';
                formularioSelect.required = true;
            } else {
                formularioSelect.style.display = 'none';
                formularioSelect.required = false;
            }
        }
        
        // Função para marcar etapas para remoção
        function marcarParaRemocao(button, etapaId) {
            const etapaDiv = button.parentElement;
            
            // Adicionar ao array de etapas removidas
            if (etapaId > 0) {
                etapasRemovidas.push(etapaId);
                document.getElementById('etapas_removidas').value = etapasRemovidas.join(',');
            }
            
            // Remover a div da etapa
            etapaDiv.remove();
            
            // Reordenar as etapas restantes
            reordenarEtapas();
        }
        
        // Função para reordenar as etapas após remoção
        function reordenarEtapas() {
            const container = document.getElementById('etapas-container');
            const etapas = container.querySelectorAll('.etapa-input');
            
            etapas.forEach((etapa, index) => {
                // Atualizar o número de ordem
                const ordemElement = etapa.querySelector('.etapa-ordem');
                if (ordemElement) {
                    ordemElement.textContent = index + 1;
                }
                
                // Atualizar o valor do campo hidden de ordem
                const ordemInput = etapa.querySelector('input[name$="[ordem]"]');
                if (ordemInput) {
                    ordemInput.value = index + 1;
                }
                
                // Atualizar os índices dos campos de tipo e formulário
                const tipoSelect = etapa.querySelector('.tipo-entrada-select');
                const formularioSelect = etapa.querySelector('.formulario-select');
                
                if (tipoSelect) {
                    tipoSelect.name = `tipos_entrada[${index}]`;
                    tipoSelect.setAttribute('onchange', `toggleFormularioSelect(this, ${index})`);
                }
                
                if (formularioSelect) {
                    formularioSelect.name = `formularios_ids[${index}]`;
                    formularioSelect.id = `formulario-${index}`;
                }
            });
            
            // Atualizar o contador
            etapaCounter = etapas.length;
        }
        
        // Inicializar os seletores de tipo para as etapas existentes
        document.addEventListener('DOMContentLoaded', function() {
            const tipoSelects = document.querySelectorAll('.tipo-entrada-select');
            tipoSelects.forEach((select, index) => {
                const formularioSelect = document.getElementById('formulario-' + index);
                if (select.value === 'questionario' && formularioSelect) {
                    formularioSelect.style.display = 'block';
                    formularioSelect.required = true;
                }
            });
        });
    </script>
</body>
</html>