<?php
session_start();

if (!isset($_SESSION['logado'])) {
    http_response_code(401);
    die(json_encode(['success' => false, 'message' => 'Não autorizado']));
}

if (!isset($_SERVER['HTTP_X_CSRF_TOKEN']) || $_SERVER['HTTP_X_CSRF_TOKEN'] !== $_SESSION['csrf_token']) {
    http_response_code(403);
    die(json_encode(['success' => false, 'message' => 'Token CSRF inválido']));
}

$tenant_id = $_SESSION['tenant_id'];
$dados = json_decode(file_get_contents('php://input'), true);

if (json_last_error() !== JSON_ERROR_NONE) {
    http_response_code(400);
    die(json_encode(['success' => false, 'message' => 'Dados inválidos']));
}

require_once 'conexao.php';
require_once 'verificador_fluxos_automatizados.php';

try {
    // Verificar se a etapa pertence ao tenant do usuário
    if (isset($dados['etapa_funil_id'])) {
        $etapa_id = $dados['etapa_funil_id'];
        
        $stmt = $conn->prepare("SELECT COUNT(*) as count FROM etapas_funis e 
                               JOIN funis f ON e.funil_id = f.id 
                               WHERE e.id = ? AND f.tenant_id = ?");
        $stmt->bind_param("ii", $etapa_id, $tenant_id);
        $stmt->execute();
        $result = $stmt->get_result()->fetch_assoc();
        
        if ($result['count'] == 0) {
            http_response_code(403);
            die(json_encode(['success' => false, 'message' => 'Etapa não pertence ao seu tenant']));
        }
        $stmt->close();
    }
    
    // Obter etapa atual do cliente antes da mudança
    $sql_etapa_origem = "SELECT etapa_funil_id FROM clientes WHERE id = ? AND tenant_id = ?";
    $stmt_origem = $conn->prepare($sql_etapa_origem);
    $stmt_origem->bind_param("ii", $dados['id'], $tenant_id);
    $stmt_origem->execute();
    $result_origem = $stmt_origem->get_result();
    $etapa_origem = $result_origem->fetch_assoc();
    $etapa_id_origem = $etapa_origem['etapa_funil_id'] ?? null;
    $stmt_origem->close();
    
    // Atualizar o cliente
    $sql = "UPDATE clientes SET etapa_funil_id = ? WHERE id = ? AND tenant_id = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("iii", $dados['etapa_funil_id'], $dados['id'], $tenant_id);
    $stmt->execute();
    
    if ($stmt->affected_rows > 0) {
        $stmt->close();
        
        // ⭐⭐ VERIFICAR FLUXOS AUTOMATIZADOS APÓS MUDANÇA DE ETAPA ⭐⭐
        // Buscar dados completos do cliente
        $sql_cliente = "SELECT Nome_Cliente, Email, responsavel FROM clientes WHERE id = ? AND tenant_id = ?";
        $stmt_cliente = $conn->prepare($sql_cliente);
        $stmt_cliente->bind_param("ii", $dados['id'], $tenant_id);
        $stmt_cliente->execute();
        $cliente_info = $stmt_cliente->get_result()->fetch_assoc();
        $stmt_cliente->close();
        
        // Buscar informações do funil
        $sql_funil = "SELECT f.id as funil_id, f.nome as funil_nome 
                      FROM etapas_funis ef 
                      JOIN funis f ON ef.funil_id = f.id 
                      WHERE ef.id = ?";
        $stmt_funil = $conn->prepare($sql_funil);
        $stmt_funil->bind_param("i", $dados['etapa_funil_id']);
        $stmt_funil->execute();
        $funil_info = $stmt_funil->get_result()->fetch_assoc();
        $stmt_funil->close();
        
        $atividades_criadas = criarAtividadesPorFluxo(
            $conn, 
            'cliente_etapa_alterada',
            $dados['id'],
            [
                'etapa_funil_id' => $dados['etapa_funil_id'],
                'etapa_anterior_id' => $etapa_id_origem,
                'funil_id' => $funil_info['funil_id'] ?? null,
                'tenant_id' => $tenant_id,
                'cliente_nome' => $cliente_info['Nome_Cliente'] ?? '',
                'cliente_email' => $cliente_info['Email'] ?? '',
                'responsavel_id' => $cliente_info['responsavel'] ?? null
            ]
        );
        
        if ($atividades_criadas > 0) {
            error_log("📅 Criadas $atividades_criadas atividades automáticas para cliente ID {$dados['id']} ao mudar da etapa $etapa_id_origem para etapa {$dados['etapa_funil_id']}");
        }
        
        echo json_encode([
            'success' => true, 
            'atividades_criadas' => $atividades_criadas
        ]);
    } else {
        $stmt->close();
        echo json_encode(['success' => false, 'message' => 'Nenhum cliente atualizado']);
    }
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'message' => 'Erro no servidor: ' . $e->getMessage()]);
}

$conn->close();
?>