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

// Dados de exemplo - substitua com um cliente real que deveria triggerar o fluxo
$cliente_id = 1; // ID de um cliente que está em etapa de agendamento
$tenant_id = $_SESSION['tenant_id'] ?? 1;

echo "<h2>🔍 DIAGNÓSTICO COMPLETO - FLUXOS AUTOMATIZADOS</h2>";

// 1. Verificar dados do cliente
echo "<h3>1. Dados do Cliente</h3>";
$sql_cliente = "SELECT c.*, ef.nome as etapa_nome, ef.tipo_entrada, f.nome as funil_nome 
                FROM clientes c 
                LEFT JOIN etapas_funis ef ON c.etapa_funil_id = ef.id 
                LEFT JOIN funis f ON ef.funil_id = f.id 
                WHERE c.id = ? AND c.tenant_id = ?";
$stmt = $conn->prepare($sql_cliente);
$stmt->bind_param("ii", $cliente_id, $tenant_id);
$stmt->execute();
$cliente = $stmt->get_result()->fetch_assoc();

if ($cliente) {
    echo "✅ Cliente encontrado:<br>";
    echo "ID: {$cliente['id']}<br>";
    echo "Nome: {$cliente['nome']}<br>";
    echo "Etapa: {$cliente['etapa_nome']} (ID: {$cliente['etapa_funil_id']})<br>";
    echo "Tipo Entrada: {$cliente['tipo_entrada']}<br>";
    echo "Funil: {$cliente['funil_nome']}<br>";
} else {
    echo "❌ Cliente não encontrado<br>";
}
$stmt->close();

// 2. Verificar fluxos existentes
echo "<h3>2. Fluxos Automatizados Configurados</h3>";
$sql_fluxos = "SELECT * FROM fluxos_automatizados WHERE tenant_id = ? AND ativo = 1";
$stmt = $conn->prepare($sql_fluxos);
$stmt->bind_param("i", $tenant_id);
$stmt->execute();
$fluxos = $stmt->get_result();

if ($fluxos->num_rows > 0) {
    echo "✅ {$fluxos->num_rows} fluxo(s) ativo(s):<br>";
    
    while ($fluxo = $fluxos->fetch_assoc()) {
        echo "<div style='border: 1px solid #ccc; padding: 10px; margin: 10px;'>";
        echo "<strong>Fluxo: {$fluxo['nome']}</strong><br>";
        echo "ID: {$fluxo['id']}<br>";
        
        // Analisar condições
        $condicoes = json_decode($fluxo['condicoes'], true);
        echo "Condições: " . count($condicoes) . "<br>";
        foreach ($condicoes as $condicao) {
            echo "→ Tipo: {$condicao['tipo']}";
            if (isset($condicao['etapa_agendamento_id'])) {
                echo " | Etapa ID: {$condicao['etapa_agendamento_id']}";
            }
            echo "<br>";
        }
        
        // Analisar ações
        $acoes = json_decode($fluxo['acoes'], true);
        echo "Ações: " . count($acoes) . "<br>";
        foreach ($acoes as $acao) {
            echo "→ Tipo Atividade ID: {$acao['tipo_atividade_id']}<br>";
        }
        echo "</div>";
    }
} else {
    echo "❌ Nenhum fluxo automatizado ativo encontrado<br>";
}
$stmt->close();

// 3. Verificar etapas de agendamento disponíveis
echo "<h3>3. Etapas de Agendamento no Sistema</h3>";
$sql_etapas_agendamento = "SELECT id, nome, tipo_entrada, funil_id 
                          FROM etapas_funis 
                          WHERE tipo_entrada = 'agendamento'";
$result = $conn->query($sql_etapas_agendamento);

if ($result->num_rows > 0) {
    echo "✅ Etapas de agendamento encontradas:<br>";
    while ($etapa = $result->fetch_assoc()) {
        echo "→ {$etapa['nome']} (ID: {$etapa['id']}) - Funil ID: {$etapa['funil_id']}<br>";
    }
} else {
    echo "❌ Nenhuma etapa com tipo_entrada = 'agendamento' encontrada<br>";
}

// 4. Testar a função de verificação de condições
echo "<h3>4. Teste de Verificação de Condições</h3>";
if ($cliente) {
    // Buscar fluxos novamente para testar
    $sql_fluxos_test = "SELECT * FROM fluxos_automatizados WHERE tenant_id = ? AND ativo = 1";
    $stmt = $conn->prepare($sql_fluxos_test);
    $stmt->bind_param("i", $tenant_id);
    $stmt->execute();
    $fluxos_test = $stmt->get_result();
    
    while ($fluxo = $fluxos_test->fetch_assoc()) {
        echo "Testando fluxo: <strong>{$fluxo['nome']}</strong><br>";
        
        $condicoes = json_decode($fluxo['condicoes'], true);
        $todas_condicoes_ok = true;
        
        foreach ($condicoes as $index => $condicao) {
            $resultado = testarCondicaoIndividual($conn, $condicao, $cliente);
            echo "Condição {$index}: {$condicao['tipo']} → " . ($resultado ? "✅ OK" : "❌ FALHOU") . "<br>";
            
            if (!$resultado) {
                $todas_condicoes_ok = false;
            }
        }
        
        echo "Resultado final: " . ($todas_condicoes_ok ? "✅ FLUXO DEVE EXECUTAR" : "❌ FLUXO NÃO EXECUTA") . "<br><br>";
    }
    $stmt->close();
}

// 5. Verificar se a tabela atividades existe e tem permissões
echo "<h3>5. Verificação da Tabela de Atividades</h3>";
$tabela_existe = $conn->query("SHOW TABLES LIKE 'atividades'")->num_rows > 0;
echo "Tabela 'atividades' existe: " . ($tabela_existe ? "✅ SIM" : "❌ NÃO") . "<br>";

if ($tabela_existe) {
    // Verificar estrutura
    $result = $conn->query("DESCRIBE atividades");
    echo "Campos da tabela atividades:<br>";
    while ($campo = $result->fetch_assoc()) {
        echo "→ {$campo['Field']} ({$campo['Type']})<br>";
    }
}

// Função auxiliar para testar condições
function testarCondicaoIndividual($conn, $condicao, $cliente) {
    $tipo = $condicao['tipo'] ?? '';
    
    switch ($tipo) {
        case 'agendamento':
            $etapa_agendamento_id = $condicao['etapa_agendamento_id'] ?? null;
            
            // Se foi especificada uma etapa específica
            if ($etapa_agendamento_id) {
                return $cliente['etapa_funil_id'] == $etapa_agendamento_id && 
                       $cliente['tipo_entrada'] === 'agendamento';
            }
            
            // Se não foi especificada etapa, verifica apenas o tipo
            return $cliente['tipo_entrada'] === 'agendamento';
            
        default:
            return false;
    }
}

$conn->close();
?>