<?php
require_once 'conexao.php';
require_once 'verificador_fluxos_automatizados.php';

/**
 * Trigger para executar fluxos quando eventos específicos ocorrem
 * Exemplo: quando um cliente é criado, atualizado, etc.
 */

class TriggerFluxos {
    private $conn;
    
    public function __construct($conn) {
        $this->conn = $conn;
    }
    
    // Trigger quando cliente é criado
    public function onClienteCriado($cliente_id) {
        error_log("🔔 Trigger: Cliente criado - ID $cliente_id");
        $this->executarFluxosParaCliente($cliente_id);
    }
    
    // Trigger quando cliente é atualizado
    public function onClienteAtualizado($cliente_id) {
        error_log("🔔 Trigger: Cliente atualizado - ID $cliente_id");
        $this->executarFluxosParaCliente($cliente_id);
    }
    
    // Trigger quando atividade é concluída
    public function onAtividadeConcluida($atividade_id, $cliente_id) {
        error_log("🔔 Trigger: Atividade concluída - ID $atividade_id");
        $this->executarFluxosParaCliente($cliente_id);
    }
    
    // Executar fluxos para um cliente específico
    private function executarFluxosParaCliente($cliente_id) {
        // Buscar dados do cliente
        $sql = "SELECT id, nome, email, telefone, status, created_at, tenant_id 
                FROM clientes WHERE id = ?";
        $stmt = $this->conn->prepare($sql);
        $stmt->bind_param("i", $cliente_id);
        $stmt->execute();
        $cliente = $stmt->get_result()->fetch_assoc();
        
        if (!$cliente) {
            return;
        }
        
        // Buscar fluxos ativos para o tenant
        $sql_fluxos = "SELECT * FROM fluxos_automatizados 
                      WHERE ativo = 1 AND tenant_id = ?";
        $stmt = $this->conn->prepare($sql_fluxos);
        $stmt->bind_param("i", $cliente['tenant_id']);
        $stmt->execute();
        $fluxos = $stmt->get_result();
        
        while ($fluxo = $fluxos->fetch_assoc()) {
            // Verificar se o cliente atende às condições deste fluxo
            $condicoes_atingidas = $this->verificarCondicoesParaCliente($cliente, $fluxo);
            
            if ($condicoes_atingidas) {
                error_log("🎯 Cliente {$cliente['nome']} atende às condições do fluxo: {$fluxo['nome']}");
                executarAcoes($this->conn, $fluxo, $cliente);
            }
        }
    }
    
    // Verificar condições para um cliente específico
    private function verificarCondicoesParaCliente($cliente, $fluxo) {
        $condicoes = json_decode($fluxo['condicoes'], true);
        
        if (empty($condicoes)) {
            return true;
        }
        
        foreach ($condicoes as $condicao) {
            $campo = $condicao['campo'];
            $operador = $condicao['operador'];
            $valor = $condicao['valor'];
            $valor_cliente = $cliente[$campo] ?? '';
            
            if (!$this->verificarCondicao($valor_cliente, $operador, $valor)) {
                return false;
            }
        }
        
        return true;
    }
    
    // Verificar uma condição individual
    private function verificarCondicao($valor_cliente, $operador, $valor) {
        switch ($operador) {
            case 'igual':
                return $valor_cliente == $valor;
                
            case 'contem':
                return stripos($valor_cliente, $valor) !== false;
                
            case 'maior_que':
                return $valor_cliente > $valor;
                
            case 'menor_que':
                return $valor_cliente < $valor;
                
            case 'data_apos':
                return strtotime($valor_cliente) > strtotime($valor);
                
            case 'data_antes':
                return strtotime($valor_cliente) < strtotime($valor);
                
            default:
                return false;
        }
    }
}

// USO DO TRIGGER - Exemplo de implementação:

// Quando salvar um cliente (no seu arquivo de salvar cliente):
/*
require_once 'trigger_fluxos.php';
$trigger = new TriggerFluxos($conn);

// Após inserir o cliente com sucesso:
$trigger->onClienteCriado($novo_cliente_id);
*/

// Quando atualizar um cliente:
// $trigger->onClienteAtualizado($cliente_id);

// Quando concluir uma atividade:
// $trigger->onAtividadeConcluida($atividade_id, $cliente_id);
?>