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

// Verificar CSRF token
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    $_SESSION['erro'] = "Token de segurança inválido.";
    header('Location: fluxos_automatizados.php');
    exit;
}

// Verificar se o usuário está logado
if (!isset($_SESSION['logado'])) {
    header('Location: login.php');
    exit;
}

$tenant_id = $_SESSION['tenant_id'] ?? null;
$usuario_id = $_SESSION['usuario_id'] ?? null;

if (!$tenant_id || !$usuario_id) {
    $_SESSION['erro'] = "Dados de sessão inválidos.";
    header('Location: fluxos_automatizados.php');
    exit;
}

try {
    // Coletar dados do formulário
    $id = $_POST['id'] ?? null;
    $nome = trim($_POST['nome'] ?? '');
    $descricao = trim($_POST['descricao'] ?? '');
    $ativo = isset($_POST['ativo']) ? 1 : 0;
    $tipo_trigger = $_POST['tipo_trigger'] ?? 'evento';
    
    // Validar dados
    if (empty($nome)) {
        throw new Exception("O nome do fluxo é obrigatório.");
    }
    
    // Processar condições (apenas para trigger por evento)
    $condicoes = [];
    if ($tipo_trigger === 'evento' && isset($_POST['condicoes']['tipo'])) {
        foreach ($_POST['condicoes']['tipo'] as $index => $tipo) {
            if (!empty($tipo)) {
                $condicao = ['tipo' => $tipo];
                
                // Adicionar dados específicos baseados no tipo
                switch ($tipo) {
                    case 'etapa_funil':
                        $condicao['etapa_funil_id'] = $_POST['condicoes']['etapa_funil_id'][$index] ?? null;
                        break;
                    case 'agendamento':
                        $condicao['etapa_agendamento_id'] = $_POST['condicoes']['etapa_agendamento_id'][$index] ?? null;
                        break;
                    case 'qualificado_especifico':
                        $condicao['questionario_id'] = $_POST['condicoes']['questionario_id'][$index] ?? null;
                        break;
                    case 'cadastro_manual':
                    case 'cadastro_importacao':
                    case 'qualificado_qualquer':
                    case 'envio_formulario':
                        // Não precisa de campos adicionais
                        break;
                }
                
                $condicoes[] = $condicao;
            }
        }
    }
    
    // Processar ações
    $acoes = [];
    
    // Processar ações de atividade
    if (isset($_POST['acoes']['atividade']['tipo_atividade_id'])) {
        foreach ($_POST['acoes']['atividade']['tipo_atividade_id'] as $index => $tipo_atividade_id) {
            if (!empty($tipo_atividade_id)) {
                $acao = [
                    'tipo' => 'atividade',
                    'tipo_atividade_id' => $tipo_atividade_id,
                    'tempo_execucao' => $_POST['acoes']['atividade']['tempo_execucao'][$index] ?? 0,
                    'unidade_tempo' => $_POST['acoes']['atividade']['unidade_tempo'][$index] ?? 'dias',
                    'descricao' => $_POST['acoes']['atividade']['descricao'][$index] ?? ''
                ];
                $acoes[] = $acao;
            }
        }
    }
    
    // Processar ações de e-mail
    if (isset($_POST['acoes']['email']['template_id'])) {
        foreach ($_POST['acoes']['email']['template_id'] as $index => $template_id) {
            if (!empty($template_id)) {
                $acao = [
                    'tipo' => 'email',
                    'template_id' => $template_id,
                    'assunto' => $_POST['acoes']['email']['assunto'][$index] ?? '',
                    'tempo_envio' => $_POST['acoes']['email']['tempo_envio'][$index] ?? 0,
                    'unidade_tempo' => $_POST['acoes']['email']['unidade_tempo'][$index] ?? 'dias',
                    'destinatario' => $_POST['acoes']['email']['destinatario'][$index] ?? 'cliente',
                    'email_especifico' => $_POST['acoes']['email']['email_especifico'][$index] ?? '',
                    'mensagem_personalizada' => $_POST['acoes']['email']['mensagem_personalizada'][$index] ?? ''
                ];
                $acoes[] = $acao;
            }
        }
    }
    
    // Processar configuração de agendamento
    $config_agendamento = null;
    if ($tipo_trigger === 'agendamento') {
        $config_agendamento = [
            'frequencia' => $_POST['config_agendamento']['frequencia'] ?? 'diario',
            'horario' => $_POST['config_agendamento']['horario'] ?? '09:00',
            'dia_semana' => $_POST['config_agendamento']['dia_semana'] ?? '1',
            'dia_mes' => $_POST['config_agendamento']['dia_mes'] ?? '1'
        ];
    }
    
    // Validações específicas por tipo de trigger
    if ($tipo_trigger === 'evento') {
        if (empty($condicoes)) {
            throw new Exception("Pelo menos uma condição é necessária para fluxos por evento.");
        }
    }
    
    if (empty($acoes)) {
        throw new Exception("Pelo menos uma ação é necessária.");
    }
    
    // Converter para JSON
    $condicoes_json = json_encode($condicoes);
    $acoes_json = json_encode($acoes);
    $config_agendamento_json = $config_agendamento ? json_encode($config_agendamento) : null;
    
    // Salvar no banco de dados
    if ($id) {
        // Atualizar fluxo existente
        if ($config_agendamento_json) {
            $sql = "UPDATE fluxos_automatizados SET nome = ?, descricao = ?, condicoes = ?, acoes = ?, ativo = ?, tipo_trigger = ?, config_agendamento = ?, atualizado_em = NOW() WHERE id = ? AND tenant_id = ?";
            $stmt = $conn->prepare($sql);
            $stmt->bind_param("ssssisiii", $nome, $descricao, $condicoes_json, $acoes_json, $ativo, $tipo_trigger, $config_agendamento_json, $id, $tenant_id);
        } else {
            $sql = "UPDATE fluxos_automatizados SET nome = ?, descricao = ?, condicoes = ?, acoes = ?, ativo = ?, tipo_trigger = ?, config_agendamento = NULL, atualizado_em = NOW() WHERE id = ? AND tenant_id = ?";
            $stmt = $conn->prepare($sql);
            $stmt->bind_param("ssssiiii", $nome, $descricao, $condicoes_json, $acoes_json, $ativo, $tipo_trigger, $id, $tenant_id);
        }
    } else {
        // Criar novo fluxo
        if ($config_agendamento_json) {
            $sql = "INSERT INTO fluxos_automatizados (nome, descricao, condicoes, acoes, ativo, tipo_trigger, config_agendamento, tenant_id, criado_por, criado_em) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())";
            $stmt = $conn->prepare($sql);
            $stmt->bind_param("ssssisiii", $nome, $descricao, $condicoes_json, $acoes_json, $ativo, $tipo_trigger, $config_agendamento_json, $tenant_id, $usuario_id);
        } else {
            $sql = "INSERT INTO fluxos_automatizados (nome, descricao, condicoes, acoes, ativo, tipo_trigger, tenant_id, criado_por, criado_em) VALUES (?, ?, ?, ?, ?, ?, ?, ?, NOW())";
            $stmt = $conn->prepare($sql);
            $stmt->bind_param("ssssiiii", $nome, $descricao, $condicoes_json, $acoes_json, $ativo, $tipo_trigger, $tenant_id, $usuario_id);
        }
    }
    
    if ($stmt->execute()) {
        $_SESSION['sucesso'] = $id ? "Fluxo atualizado com sucesso!" : "Fluxo criado com sucesso!";
    } else {
        throw new Exception("Erro ao salvar fluxo: " . $stmt->error);
    }
    
    $stmt->close();
    $conn->close();
    
} catch (Exception $e) {
    $_SESSION['erro'] = $e->getMessage();
}

header('Location: fluxos_automatizados.php');
exit;
?>