-- Tabela de workflows
CREATE TABLE IF NOT EXISTS workflows (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id VARCHAR(100) NOT NULL,
    
    -- Dados básicos
    nome VARCHAR(255) NOT NULL,
    descricao TEXT NULL,
    categoria VARCHAR(100) NULL, -- 'vendas', 'compras', 'financeiro', 'estoque', 'geral'
    
    -- Configuração do workflow
    trigger_type ENUM('manual', 'evento', 'agendado', 'webhook') NOT NULL DEFAULT 'manual',
    trigger_config JSON NULL, -- Configuração específica do trigger
    
    -- Definição do workflow (JSON com nodes e edges)
    definition JSON NOT NULL, -- Estrutura do workflow (nodes, edges, conditions)
    
    -- Status
    status ENUM('rascunho', 'ativo', 'inativo', 'erro') DEFAULT 'rascunho',
    ativo BOOLEAN DEFAULT FALSE,
    
    -- Execução
    execucoes_total INT DEFAULT 0,
    execucoes_sucesso INT DEFAULT 0,
    execucoes_erro INT DEFAULT 0,
    ultima_execucao DATETIME NULL,
    
    -- Metadados
    created_by INT NULL,
    updated_by INT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    INDEX idx_tenant (tenant_id),
    INDEX idx_status (status),
    INDEX idx_categoria (categoria),
    INDEX idx_trigger_type (trigger_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabela de execuções de workflows
CREATE TABLE IF NOT EXISTS workflow_executions (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id VARCHAR(100) NOT NULL,
    workflow_id BIGINT UNSIGNED NOT NULL,
    
    -- Dados da execução
    status ENUM('pendente', 'executando', 'sucesso', 'erro', 'cancelado') DEFAULT 'pendente',
    input_data JSON NULL, -- Dados de entrada
    output_data JSON NULL, -- Dados de saída
    error_message TEXT NULL,
    
    -- Rastreamento
    started_at DATETIME NULL,
    completed_at DATETIME NULL,
    duration_ms INT NULL, -- Duração em milissegundos
    
    -- Contexto
    triggered_by INT NULL, -- Usuário que acionou (se manual)
    trigger_event VARCHAR(255) NULL, -- Evento que acionou (se automático)
    
    -- Metadados
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_tenant (tenant_id),
    INDEX idx_workflow (workflow_id),
    INDEX idx_status (status),
    INDEX idx_created (created_at),
    FOREIGN KEY (workflow_id) REFERENCES workflows(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabela de logs de execução (detalhado)
CREATE TABLE IF NOT EXISTS workflow_execution_logs (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id VARCHAR(100) NOT NULL,
    execution_id BIGINT UNSIGNED NOT NULL,
    
    -- Dados do log
    node_id VARCHAR(255) NULL, -- ID do node no workflow
    node_type VARCHAR(100) NULL, -- Tipo do node (action, condition, etc)
    action VARCHAR(255) NULL, -- Ação executada
    status ENUM('pendente', 'executando', 'sucesso', 'erro', 'pulado') DEFAULT 'pendente',
    
    -- Dados
    input_data JSON NULL,
    output_data JSON NULL,
    error_message TEXT NULL,
    
    -- Timing
    started_at DATETIME NULL,
    completed_at DATETIME NULL,
    duration_ms INT NULL,
    
    -- Metadados
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_tenant (tenant_id),
    INDEX idx_execution (execution_id),
    INDEX idx_node (node_id),
    INDEX idx_status (status),
    FOREIGN KEY (execution_id) REFERENCES workflow_executions(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabela de templates de workflows
CREATE TABLE IF NOT EXISTS workflow_templates (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id VARCHAR(100) NULL, -- NULL = template global
    
    -- Dados do template
    nome VARCHAR(255) NOT NULL,
    descricao TEXT NULL,
    categoria VARCHAR(100) NULL,
    icon VARCHAR(100) NULL,
    
    -- Definição do workflow
    definition JSON NOT NULL,
    
    -- Status
    publico BOOLEAN DEFAULT FALSE, -- Template público ou privado
    ativo BOOLEAN DEFAULT TRUE,
    
    -- Metadados
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    INDEX idx_tenant (tenant_id),
    INDEX idx_categoria (categoria),
    INDEX idx_publico (publico)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

