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

date_default_timezone_set('America/Sao_Paulo');

if (!isset($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

if (!isset($_SESSION['logado']) || $_SESSION['logado'] !== true) {
    header('Location: login.php');
    exit;
}

$tenant_id = $_SESSION['tenant_id'] ?? null;
$usuario_id = $_SESSION['usuario_id'] ?? null;
$permissao = $_SESSION['permissao'] ?? 'usuario';
$is_admin = ($permissao === 'admin');
$is_super_admin = ($permissao === 'super_admin');

if (!$tenant_id) {
    die("Tenant não identificado.");
}

if (!isset($conn) || $conn->connect_errno) {
    die("Erro: Conexão com banco de dados não estabelecida corretamente.");
}

// ----------------------------
// FUNÇÕES DE PERMISSÃO
// ----------------------------

function usuarioPodeVisualizarCliente($conn, $usuario_id, $cliente_id) {
    $stmt = $conn->prepare("SELECT visualizar FROM permissoes_clientes WHERE usuario_id = ? AND cliente_id = ?");
    $stmt->bind_param("ii", $usuario_id, $cliente_id);
    $stmt->execute();
    $res = $stmt->get_result();
    
    if ($res->num_rows > 0) {
        $permissao = $res->fetch_assoc();
        $stmt->close();
        return (bool)$permissao['visualizar'];
    }
    $stmt->close();
    
    $stmt = $conn->prepare("SELECT usuario_cadastro FROM clientes WHERE id = ?");
    $stmt->bind_param("i", $cliente_id);
    $stmt->execute();
    $res = $stmt->get_result();
    
    if ($res->num_rows > 0) {
        $cliente = $res->fetch_assoc();
        $stmt->close();
        // Corrigido: Comparação correta (usuario_cadastro é varchar, não int)
        return $cliente['usuario_cadastro'] == $usuario_id;
    }
    
    $stmt->close();
    return false;
}

function usuarioPodeVerTodosClientes($conn, $usuario_id) {
    $stmt = $conn->prepare("SELECT ver_todos_clientes FROM usuarios WHERE id = ?");
    $stmt->bind_param("i", $usuario_id);
    $stmt->execute();
    $res = $stmt->get_result();
    
    if ($res->num_rows > 0) {
        $usuario = $res->fetch_assoc();
        $stmt->close();
        return (bool)$usuario['ver_todos_clientes'];
    }
    
    $stmt->close();
    return false;
}

// ----------------------------
// NOVAS FUNÇÕES DE ANÁLISE (CORRIGIDAS)
// ----------------------------

// 1. PERFORMANCE DO FUNIL DE VENDAS - CORRIGIDO
function carregarDadosPerformanceFunil($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $data_inicio = null, $data_fim = null) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    $sql = "SELECT 
                COALESCE(ef.nome, 'Sem Etapa') as etapa,
                COUNT(c.id) as total_clientes,
                ROUND(COUNT(c.id) * 100.0 / NULLIF((SELECT COUNT(*) FROM clientes c2 WHERE c2.tenant_id = ? AND c2.deletado_em IS NULL), 0), 2) as percentual
            FROM clientes c
            LEFT JOIN etapas_funis ef ON c.etapa_funil_id = ef.id
            WHERE c.deletado_em IS NULL 
              AND c.tenant_id = ?";
    
    $params = [$tenant_id, $tenant_id];
    $types = "ii";
    
    if (!$ver_todos) {
        $sql .= " AND (c.usuario_cadastro = ? OR EXISTS (
                    SELECT 1 FROM permissoes_clientes pc 
                    WHERE pc.cliente_id = c.id 
                    AND pc.usuario_id = ? 
                    AND pc.visualizar = 1
                ))";
        $params[] = $usuario_id;
        $params[] = $usuario_id;
        $types .= "ii";
    }
    
    if ($data_inicio) {
        $sql .= " AND DATE(c.Data_Cadastro) >= ?";
        $params[] = $data_inicio;
        $types .= "s";
    }
    
    if ($data_fim) {
        $sql .= " AND DATE(c.Data_Cadastro) <= ?";
        $params[] = $data_fim;
        $types .= "s";
    }
    
    $sql .= " GROUP BY ef.nome
              ORDER BY CASE WHEN ef.nome IS NULL THEN 1 ELSE 0 END, ef.ordem";
    
    $stmt = $conn->prepare($sql);
    if (!$stmt) die("Erro: " . $conn->error);
    
    if ($params) {
        $stmt->bind_param($types, ...$params);
    }
    
    $stmt->execute();
    $res = $stmt->get_result();
    $dados = $res->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    
    $labels = [];
    $clientes = [];
    $percentuais = [];
    
    foreach ($dados as $item) {
        $labels[] = $item['etapa'];
        $clientes[] = (int)$item['total_clientes'];
        $percentuais[] = (float)$item['percentual'];
    }
    
    return [
        'labels' => $labels,
        'clientes' => $clientes,
        'percentuais' => $percentuais,
        'total_clientes' => array_sum($clientes),
        'dados_completos' => $dados
    ];
}

// 2. CLIENTES PERDIDOS POR MOTIVO - CORRIGIDO
function carregarDadosClientesPerdidos($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $data_inicio = null, $data_fim = null) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    $sql = "SELECT 
                COALESCE(cp.motivo, 'Sem motivo especificado') as motivo,
                COUNT(cp.id) as total_perdidos,
                ROUND(COUNT(cp.id) * 100.0 / NULLIF((SELECT COUNT(*) FROM clientes_perdidos WHERE tenant_id = ? AND restaurado = 0), 0), 2) as percentual
            FROM clientes_perdidos cp
            JOIN clientes c ON cp.cliente_id = c.id
            WHERE cp.restaurado = 0
              AND cp.tenant_id = ?";
    
    $params = [$tenant_id, $tenant_id];
    $types = "ii";
    
    if (!$ver_todos) {
        $sql .= " AND (c.usuario_cadastro = ? OR EXISTS (
                    SELECT 1 FROM permissoes_clientes pc 
                    WHERE pc.cliente_id = c.id 
                    AND pc.usuario_id = ? 
                    AND pc.visualizar = 1
                ))";
        $params[] = $usuario_id;
        $params[] = $usuario_id;
        $types .= "ii";
    }
    
    if ($data_inicio) {
        $sql .= " AND DATE(cp.data_perdido) >= ?";
        $params[] = $data_inicio;
        $types .= "s";
    }
    
    if ($data_fim) {
        $sql .= " AND DATE(cp.data_perdido) <= ?";
        $params[] = $data_fim;
        $types .= "s";
    }
    
    $sql .= " GROUP BY cp.motivo
              ORDER BY total_perdidos DESC
              LIMIT 10";
    
    $stmt = $conn->prepare($sql);
    if (!$stmt) die("Erro: " . $conn->error);
    
    if ($params) {
        $stmt->bind_param($types, ...$params);
    }
    
    $stmt->execute();
    $res = $stmt->get_result();
    $dados = $res->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    
    $labels = [];
    $perdidos = [];
    $percentuais = [];
    
    foreach ($dados as $item) {
        $labels[] = $item['motivo'];
        $perdidos[] = (int)$item['total_perdidos'];
        $percentuais[] = (float)$item['percentual'];
    }
    
    return [
        'labels' => $labels,
        'perdidos' => $perdidos,
        'percentuais' => $percentuais,
        'total_perdidos' => array_sum($perdidos),
        'dados_completos' => $dados
    ];
}

// 3. ATIVIDADES POR TIPO E STATUS - CORRIGIDO
function carregarDadosAtividadesDetalhadas($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $data_inicio = null, $data_fim = null) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    $sql = "SELECT 
                CASE 
                    WHEN a.criado_por_fluxo IS NOT NULL THEN 'Automatizada'
                    WHEN a.nome_usuario = 'Sistema' THEN 'Sistema'
                    ELSE 'Manual'
                END as tipo_origem,
                a.concluida,
                COUNT(a.id) as total_atividades,
                AVG(TIMESTAMPDIFF(MINUTE, a.data_agendada, COALESCE(a.data_conclusao, NOW()))) as tempo_medio_minutos
            FROM atividades a
            WHERE a.tenant_id = ?
              AND a.data_agendada IS NOT NULL";
    
    $params = [$tenant_id];
    $types = "i";
    
    if (!$ver_todos) {
        $sql .= " AND a.usuario_id = ?";
        $params[] = $usuario_id;
        $types .= "i";
    }
    
    if ($data_inicio) {
        $sql .= " AND DATE(a.data_agendada) >= ?";
        $params[] = $data_inicio;
        $types .= "s";
    }
    
    if ($data_fim) {
        $sql .= " AND DATE(a.data_agendada) <= ?";
        $params[] = $data_fim;
        $types .= "s";
    }
    
    $sql .= " GROUP BY tipo_origem, a.concluida
              ORDER BY tipo_origem, a.concluida";
    
    $stmt = $conn->prepare($sql);
    if (!$stmt) die("Erro: " . $conn->error);
    
    if ($params) {
        $stmt->bind_param($types, ...$params);
    }
    
    $stmt->execute();
    $res = $stmt->get_result();
    $dados = $res->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    
    $labels = [];
    $concluidas = [];
    $pendentes = [];
    $tempos_medios = [];
    
    foreach ($dados as $item) {
        $label = $item['tipo_origem'] . ' - ' . ($item['concluida'] ? 'Concluída' : 'Pendente');
        $labels[] = $label;
        
        if ($item['concluida']) {
            $concluidas[] = (int)$item['total_atividades'];
            $tempos_medios[] = (float)$item['tempo_medio_minutos'];
            $pendentes[] = 0;
        } else {
            $pendentes[] = (int)$item['total_atividades'];
            $concluidas[] = 0;
            $tempos_medios[] = 0;
        }
    }
    
    return [
        'labels' => $labels,
        'concluidas' => $concluidas,
        'pendentes' => $pendentes,
        'tempos_medios' => $tempos_medios,
        'total_atividades' => array_sum($concluidas) + array_sum($pendentes),
        'dados_completos' => $dados
    ];
}

// 4. FLUXOS AUTOMATIZADOS - EXECUÇÕES - CORRIGIDO
function carregarDadosFluxosAutomatizados($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $data_inicio = null, $data_fim = null) {
    try {
        // Primeiro, verificar quais fluxos existem
        $sql = "SELECT id, nome FROM fluxos_automatizados 
                WHERE tenant_id = ? AND ativo = 1
                ORDER BY nome";
        
        $stmt = $conn->prepare($sql);
        if (!$stmt) {
            throw new Exception("Erro ao preparar consulta: " . $conn->error);
        }
        
        $stmt->bind_param("i", $tenant_id);
        $stmt->execute();
        $res = $stmt->get_result();
        $fluxos = $res->fetch_all(MYSQLI_ASSOC);
        $stmt->close();
        
        if (empty($fluxos)) {
            return [
                'labels' => [],
                'atividades' => [],
                'emails' => [],
                'logs' => [],
                'total_fluxos' => 0,
                'dados_completos' => []
            ];
        }
        
        $labels = [];
        $atividades = [];
        $emails = [];
        $logs = [];
        $dados_completos = [];
        
        foreach ($fluxos as $fluxo) {
            $fluxo_id = $fluxo['id'];
            
            // Contar atividades geradas por este fluxo
            $sql_atividades = "SELECT COUNT(*) as total 
                               FROM atividades 
                               WHERE criado_por_fluxo = ? 
                               AND tenant_id = ?";
            
            if ($data_inicio && $data_fim) {
                $sql_atividades .= " AND DATE(data_agendada) BETWEEN ? AND ?";
            }
            
            $stmt = $conn->prepare($sql_atividades);
            if ($data_inicio && $data_fim) {
                $stmt->bind_param("iiss", $fluxo_id, $tenant_id, $data_inicio, $data_fim);
            } else {
                $stmt->bind_param("ii", $fluxo_id, $tenant_id);
            }
            
            $stmt->execute();
            $res_atividades = $stmt->get_result();
            $atividade = $res_atividades->fetch_assoc();
            $stmt->close();
            
            // Contar emails agendados - CORRIGIDO (tabela correta é emails_agendados)
            $total_emails = 0;
            // Verificar se a tabela emails_agendados existe
            $check_table = $conn->query("SHOW TABLES LIKE 'emails_agendados'");
            if ($check_table && $check_table->num_rows > 0) {
                $sql_emails = "SELECT COUNT(*) as total 
                               FROM emails_agendados 
                               WHERE fluxo_id = ? 
                               AND tenant_id = ?";
                
                if ($data_inicio && $data_fim) {
                    $sql_emails .= " AND DATE(data_agendamento) BETWEEN ? AND ?";
                }
                
                $stmt = $conn->prepare($sql_emails);
                if ($data_inicio && $data_fim) {
                    $stmt->bind_param("iiss", $fluxo_id, $tenant_id, $data_inicio, $data_fim);
                } else {
                    $stmt->bind_param("ii", $fluxo_id, $tenant_id);
                }
                
                $stmt->execute();
                $res_emails = $stmt->get_result();
                $email = $res_emails->fetch_assoc();
                $total_emails = (int)($email['total'] ?? 0);
                $stmt->close();
            }
            
            // Contar logs gerados
            $sql_logs = "SELECT COUNT(*) as total 
                         FROM logs_sistema 
                         WHERE objeto_id = ? 
                         AND tenant_id = ?
                         AND tipo = 'fluxo'";
            
            if ($data_inicio && $data_fim) {
                $sql_logs .= " AND DATE(data_hora) BETWEEN ? AND ?";
            }
            
            $stmt = $conn->prepare($sql_logs);
            if ($data_inicio && $data_fim) {
                $stmt->bind_param("iiss", $fluxo_id, $tenant_id, $data_inicio, $data_fim);
            } else {
                $stmt->bind_param("ii", $fluxo_id, $tenant_id);
            }
            
            $stmt->execute();
            $res_logs = $stmt->get_result();
            $log = $res_logs->fetch_assoc();
            $stmt->close();
            
            // Buscar última execução do fluxo
            $sql_ultima_exec = "SELECT ultima_execucao FROM fluxos_automatizados WHERE id = ?";
            $stmt = $conn->prepare($sql_ultima_exec);
            $stmt->bind_param("i", $fluxo_id);
            $stmt->execute();
            $res_ultima = $stmt->get_result();
            $ultima_exec = $res_ultima->fetch_assoc();
            $stmt->close();
            
            // Adicionar ao array
            $total_atividades = (int)($atividade['total'] ?? 0);
            $total_logs = (int)($log['total'] ?? 0);
            
            $labels[] = $fluxo['nome'];
            $atividades[] = $total_atividades;
            $emails[] = $total_emails;
            $logs[] = $total_logs;
            
            $dados_completos[] = [
                'nome' => $fluxo['nome'],
                'atividades_geradas' => $total_atividades,
                'emails_agendados' => $total_emails,
                'logs_gerados' => $total_logs,
                'ultima_execucao' => $ultima_exec['ultima_execucao'] ?? 'Nunca'
            ];
        }
        
        return [
            'labels' => $labels,
            'atividades' => $atividades,
            'emails' => $emails,
            'logs' => $logs,
            'total_fluxos' => count($fluxos),
            'dados_completos' => $dados_completos
        ];
        
    } catch (Exception $e) {
        error_log("Erro em carregarDadosFluxosAutomatizados: " . $e->getMessage());
        return [
            'labels' => [],
            'atividades' => [],
            'emails' => [],
            'logs' => [],
            'total_fluxos' => 0,
            'dados_completos' => []
        ];
    }
}

// 5. TAXA DE CONVERSÃO POR ORIGEM - CORRIGIDO
function carregarDadosConversaoOrigem($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $data_inicio = null, $data_fim = null) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    $sql = "SELECT 
                COALESCE(c.Origem, 'Sem origem') as origem,
                COUNT(DISTINCT c.id) as total_clientes,
                COUNT(DISTINCT CASE WHEN c.status >= 6 THEN c.id END) as clientes_concluidos,
                ROUND(COUNT(DISTINCT CASE WHEN c.status >= 6 THEN c.id END) * 100.0 / NULLIF(COUNT(DISTINCT c.id), 0), 2) as taxa_conversao
            FROM clientes c
            WHERE c.deletado_em IS NULL 
              AND c.tenant_id = ?";
    
    $params = [$tenant_id];
    $types = "i";
    
    if (!$ver_todos) {
        $sql .= " AND (c.usuario_cadastro = ? OR EXISTS (
                    SELECT 1 FROM permissoes_clientes pc 
                    WHERE pc.cliente_id = c.id 
                    AND pc.usuario_id = ? 
                    AND pc.visualizar = 1
                ))";
        $params[] = $usuario_id;
        $params[] = $usuario_id;
        $types .= "ii";
    }
    
    if ($data_inicio) {
        $sql .= " AND DATE(c.Data_Cadastro) >= ?";
        $params[] = $data_inicio;
        $types .= "s";
    }
    
    if ($data_fim) {
        $sql .= " AND DATE(c.Data_Cadastro) <= ?";
        $params[] = $data_fim;
        $types .= "s";
    }
    
    $sql .= " GROUP BY c.Origem
              HAVING total_clientes > 0
              ORDER BY taxa_conversao DESC, total_clientes DESC
              LIMIT 10";
    
    $stmt = $conn->prepare($sql);
    if (!$stmt) die("Erro: " . $conn->error);
    
    if ($params) {
        $stmt->bind_param($types, ...$params);
    }
    
    $stmt->execute();
    $res = $stmt->get_result();
    $dados = $res->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    
    $labels = [];
    $clientes = [];
    $concluidos = [];
    $taxas = [];
    
    foreach ($dados as $item) {
        $labels[] = $item['origem'];
        $clientes[] = (int)$item['total_clientes'];
        $concluidos[] = (int)$item['clientes_concluidos'];
        $taxas[] = (float)$item['taxa_conversao'];
    }
    
    $media_taxa = count($taxas) > 0 ? array_sum($taxas) / count($taxas) : 0;
    
    return [
        'labels' => $labels,
        'clientes' => $clientes,
        'concluidos' => $concluidos,
        'taxas' => $taxas,
        'media_taxa' => $media_taxa,
        'dados_completos' => $dados
    ];
}

// 6. TEMPO MÉDIO POR ETAPA DO FUNIL - CORRIGIDO (SIMPLIFICADO)
function carregarDadosTempoEtapa($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $data_inicio = null, $data_fim = null) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    // Consulta simplificada usando timeline
    $sql = "SELECT 
                COALESCE(ef.nome, 'Sem Etapa') as etapa,
                COUNT(t.id) as total_movimentacoes,
                AVG(TIMESTAMPDIFF(HOUR, t.data_movimentacao, 
                    (SELECT MIN(t2.data_movimentacao) 
                     FROM timeline t2 
                     WHERE t2.cliente_id = t.cliente_id 
                     AND t2.id > t.id))) as tempo_medio_horas
            FROM timeline t
            JOIN clientes c ON t.cliente_id = c.id
            LEFT JOIN etapas_funis ef ON c.etapa_funil_id = ef.id
            WHERE t.tenant_id = ?";
    
    $params = [$tenant_id];
    $types = "i";
    
    if (!$ver_todos) {
        $sql .= " AND (c.usuario_cadastro = ? OR EXISTS (
                    SELECT 1 FROM permissoes_clientes pc 
                    WHERE pc.cliente_id = c.id 
                    AND pc.usuario_id = ? 
                    AND pc.visualizar = 1
                ))";
        $params[] = $usuario_id;
        $params[] = $usuario_id;
        $types .= "ii";
    }
    
    if ($data_inicio) {
        $sql .= " AND DATE(t.data_movimentacao) >= ?";
        $params[] = $data_inicio;
        $types .= "s";
    }
    
    if ($data_fim) {
        $sql .= " AND DATE(t.data_movimentacao) <= ?";
        $params[] = $data_fim;
        $types .= "s";
    }
    
    $sql .= " GROUP BY ef.nome
              ORDER BY ef.ordem";
    
    $stmt = $conn->prepare($sql);
    if (!$stmt) die("Erro: " . $conn->error);
    
    if ($params) {
        $stmt->bind_param($types, ...$params);
    }
    
    $stmt->execute();
    $res = $stmt->get_result();
    $dados = $res->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    
    $labels = [];
    $movimentacoes = [];
    $tempos = [];
    
    foreach ($dados as $item) {
        if ($item['tempo_medio_horas'] !== null) {
            $labels[] = $item['etapa'];
            $movimentacoes[] = (int)$item['total_movimentacoes'];
            $tempos[] = (float)$item['tempo_medio_horas'];
        }
    }
    
    $tempo_medio_total = count($tempos) > 0 ? array_sum($tempos) / count($tempos) : 0;
    
    return [
        'labels' => $labels,
        'movimentacoes' => $movimentacoes,
        'tempos' => $tempos,
        'tempo_medio_total' => $tempo_medio_total,
        'dados_completos' => $dados
    ];
}

// 7. PRODUTIVIDADE POR USUÁRIO - CORRIGIDO
function carregarDadosProdutividadeUsuario($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $data_inicio = null, $data_fim = null) {
    // Consulta apenas usuários do tenant
    $sql = "SELECT 
                u.id,
                u.nome,
                COUNT(DISTINCT a.id) as total_atividades,
                COUNT(DISTINCT CASE WHEN a.concluida = 1 THEN a.id END) as atividades_concluidas,
                COUNT(DISTINCT cp.id) as produtos_vendidos,
                COUNT(DISTINCT ls.id) as logs_registrados,
                COUNT(DISTINCT c.id) as clientes_cadastrados,
                ROUND(COUNT(DISTINCT CASE WHEN a.concluida = 1 THEN a.id END) * 100.0 / NULLIF(COUNT(DISTINCT a.id), 0), 2) as taxa_conclusao
            FROM usuarios u
            LEFT JOIN atividades a ON u.id = a.usuario_id AND a.tenant_id = u.tenant_id
            LEFT JOIN cliente_produtos cp ON u.id = cp.usuario_id AND cp.tenant_id = u.tenant_id
            LEFT JOIN logs_sistema ls ON u.id = ls.usuario_id AND ls.tenant_id = u.tenant_id
            LEFT JOIN clientes c ON u.id = c.responsavel AND c.tenant_id = u.tenant_id
            WHERE u.tenant_id = ?
              AND u.ativo = 'sim'";
    
    $params = [$tenant_id];
    $types = "i";
    
    if ($data_inicio) {
        $sql .= " AND (
                    (a.data_agendada >= ? OR a.data_agendada IS NULL) AND
                    (cp.data_cadastro >= ? OR cp.data_cadastro IS NULL) AND
                    (ls.data_hora >= ? OR ls.data_hora IS NULL) AND
                    (c.Data_Cadastro >= ? OR c.Data_Cadastro IS NULL)
                  )";
        $params[] = $data_inicio;
        $params[] = $data_inicio;
        $params[] = $data_inicio;
        $params[] = $data_inicio;
        $types .= "ssss";
    }
    
    if ($data_fim) {
        $sql .= " AND (
                    (a.data_agendada <= ? OR a.data_agendada IS NULL) AND
                    (cp.data_cadastro <= ? OR cp.data_cadastro IS NULL) AND
                    (ls.data_hora <= ? OR ls.data_hora IS NULL) AND
                    (c.Data_Cadastro <= ? OR c.Data_Cadastro IS NULL)
                  )";
        $params[] = $data_fim;
        $params[] = $data_fim;
        $params[] = $data_fim;
        $params[] = $data_fim;
        $types .= "ssss";
    }
    
    $sql .= " GROUP BY u.id, u.nome
              ORDER BY atividades_concluidas DESC
              LIMIT 10";
    
    $stmt = $conn->prepare($sql);
    if (!$stmt) die("Erro: " . $conn->error);
    
    if ($params) {
        $stmt->bind_param($types, ...$params);
    }
    
    $stmt->execute();
    $res = $stmt->get_result();
    $dados = $res->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    
    $labels = [];
    $atividades = [];
    $concluidas = [];
    $produtos = [];
    $logs = [];
    $clientes = [];
    $taxas = [];
    
    foreach ($dados as $item) {
        $labels[] = $item['nome'];
        $atividades[] = (int)$item['total_atividades'];
        $concluidas[] = (int)$item['atividades_concluidas'];
        $produtos[] = (int)$item['produtos_vendidos'];
        $logs[] = (int)$item['logs_registrados'];
        $clientes[] = (int)$item['clientes_cadastrados'];
        $taxas[] = (float)$item['taxa_conclusao'];
    }
    
    return [
        'labels' => $labels,
        'atividades' => $atividades,
        'concluidas' => $concluidas,
        'produtos' => $produtos,
        'logs' => $logs,
        'clientes' => $clientes,
        'taxas' => $taxas,
        'dados_completos' => $dados
    ];
}

// 8. CRESCIMENTO DE CLIENTES MÊS A MÊS - CORRIGIDO
function carregarDadosCrescimentoClientes($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $ano = null) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    $ano = $ano ?: date('Y');
    
    $sql = "SELECT 
                MONTH(Data_Cadastro) as mes,
                COUNT(id) as novos_clientes,
                SUM(CASE WHEN status >= 6 THEN 1 ELSE 0 END) as clientes_concluidos
            FROM clientes
            WHERE tenant_id = ?
              AND YEAR(Data_Cadastro) = ?
              AND deletado_em IS NULL";
    
    $params = [$tenant_id, $ano];
    $types = "ii";
    
    if (!$ver_todos) {
        $sql .= " AND (usuario_cadastro = ? OR EXISTS (
                    SELECT 1 FROM permissoes_clientes pc 
                    WHERE pc.cliente_id = clientes.id 
                    AND pc.usuario_id = ? 
                    AND pc.visualizar = 1
                ))";
        $params[] = $usuario_id;
        $params[] = $usuario_id;
        $types .= "ii";
    }
    
    $sql .= " GROUP BY MONTH(Data_Cadastro)
              ORDER BY mes";
    
    $stmt = $conn->prepare($sql);
    if (!$stmt) die("Erro: " . $conn->error);
    
    if ($params) {
        $stmt->bind_param($types, ...$params);
    }
    
    $stmt->execute();
    $res = $stmt->get_result();
    $dados = $res->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    
    $meses = [
        1 => 'Jan', 2 => 'Fev', 3 => 'Mar', 4 => 'Abr',
        5 => 'Mai', 6 => 'Jun', 7 => 'Jul', 8 => 'Ago',
        9 => 'Set', 10 => 'Out', 11 => 'Nov', 12 => 'Dez'
    ];
    
    $labels = [];
    $novos = array_fill(0, 12, 0);
    $concluidos = array_fill(0, 12, 0);
    $variacoes = array_fill(0, 12, 0);
    
    foreach ($dados as $item) {
        $mes = (int)$item['mes'] - 1;
        $novos[$mes] = (int)$item['novos_clientes'];
        $concluidos[$mes] = (int)$item['clientes_concluidos'];
    }
    
    // Calcular variações
    for ($i = 0; $i < 12; $i++) {
        $variacoes[$i] = ($i > 0) ? $novos[$i] - $novos[$i-1] : 0;
        $labels[] = $meses[$i+1];
    }
    
    $total_novos = array_sum($novos);
    $total_concluidos = array_sum($concluidos);
    
    return [
        'labels' => $labels,
        'novos' => $novos,
        'concluidos' => $concluidos,
        'variacoes' => $variacoes,
        'total_novos' => $total_novos,
        'total_concluidos' => $total_concluidos,
        'dados_completos' => $dados
    ];
}

// 9. ANÁLISE DE TICKET MÉDIO - CORRIGIDO
function carregarDadosTicketMedio($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $data_inicio = null, $data_fim = null) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    $sql = "SELECT 
                DATE(cp.data_cadastro) as data,
                COUNT(DISTINCT cp.cliente_id) as total_clientes,
                SUM(cp.valor * cp.quantidade) as valor_total,
                ROUND(SUM(cp.valor * cp.quantidade) / NULLIF(COUNT(DISTINCT cp.cliente_id), 0), 2) as ticket_medio
            FROM cliente_produtos cp
            JOIN clientes c ON cp.cliente_id = c.id
            WHERE cp.tenant_id = ?
              AND cp.valor > 0";
    
    $params = [$tenant_id];
    $types = "i";
    
    if (!$ver_todos) {
        $sql .= " AND (c.usuario_cadastro = ? OR EXISTS (
                    SELECT 1 FROM permissoes_clientes pc 
                    WHERE pc.cliente_id = c.id 
                    AND pc.usuario_id = ? 
                    AND pc.visualizar = 1
                ))";
        $params[] = $usuario_id;
        $params[] = $usuario_id;
        $types .= "ii";
    }
    
    if ($data_inicio) {
        $sql .= " AND DATE(cp.data_cadastro) >= ?";
        $params[] = $data_inicio;
        $types .= "s";
    }
    
    if ($data_fim) {
        $sql .= " AND DATE(cp.data_cadastro) <= ?";
        $params[] = $data_fim;
        $types .= "s";
    }
    
    $sql .= " GROUP BY DATE(cp.data_cadastro)
              HAVING total_clientes > 0
              ORDER BY data DESC
              LIMIT 30";
    
    $stmt = $conn->prepare($sql);
    if (!$stmt) die("Erro: " . $conn->error);
    
    if ($params) {
        $stmt->bind_param($types, ...$params);
    }
    
    $stmt->execute();
    $res = $stmt->get_result();
    $dados = $res->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    
    // Ordenar por data crescente para gráfico
    usort($dados, function($a, $b) {
        return strtotime($a['data']) - strtotime($b['data']);
    });
    
    $labels = [];
    $clientes = [];
    $valores = [];
    $tickets = [];
    
    foreach ($dados as $item) {
        $labels[] = $item['data'];
        $clientes[] = (int)$item['total_clientes'];
        $valores[] = (float)$item['valor_total'];
        $tickets[] = (float)$item['ticket_medio'];
    }
    
    $ticket_medio_geral = count($tickets) > 0 ? array_sum($tickets) / count($tickets) : 0;
    $total_valor = array_sum($valores);
    $total_clientes = array_sum($clientes);
    
    return [
        'labels' => $labels,
        'clientes' => $clientes,
        'valores' => $valores,
        'tickets' => $tickets,
        'ticket_medio_geral' => $ticket_medio_geral,
        'total_valor' => $total_valor,
        'total_clientes' => $total_clientes,
        'dados_completos' => $dados
    ];
}

// 10. SATISFAÇÃO DO CLIENTE (ANÁLISE DE FORMULÁRIOS) - CORRIGIDO
function carregarDadosSatisfacao($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $data_inicio = null, $data_fim = null) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    $sql = "SELECT 
                COALESCE(f.nome, 'Formulário não identificado') as formulario,
                COUNT(ef.id) as total_envios,
                SUM(CASE WHEN ef.utilizado = 1 THEN 1 ELSE 0 END) as respostas,
                ROUND(SUM(CASE WHEN ef.utilizado = 1 THEN 1 ELSE 0 END) * 100.0 / NULLIF(COUNT(ef.id), 0), 2) as taxa_resposta
            FROM envios_formulario ef
            LEFT JOIN formularios f ON ef.formulario_id = f.id
            LEFT JOIN clientes c ON ef.cliente_id = c.id
            WHERE ef.tenant_id = ?
              AND ef.formulario_id IS NOT NULL";
    
    $params = [$tenant_id];
    $types = "i";
    
    if (!$ver_todos) {
        $sql .= " AND (c.usuario_cadastro = ? OR EXISTS (
                    SELECT 1 FROM permissoes_clientes pc 
                    WHERE pc.cliente_id = c.id 
                    AND pc.usuario_id = ? 
                    AND pc.visualizar = 1
                ))";
        $params[] = $usuario_id;
        $params[] = $usuario_id;
        $types .= "ii";
    }
    
    if ($data_inicio) {
        $sql .= " AND DATE(ef.data_envio) >= ?";
        $params[] = $data_inicio;
        $types .= "s";
    }
    
    if ($data_fim) {
        $sql .= " AND DATE(ef.data_envio) <= ?";
        $params[] = $data_fim;
        $types .= "s";
    }
    
    $sql .= " GROUP BY f.nome
              ORDER BY total_envios DESC
              LIMIT 10";
    
    $stmt = $conn->prepare($sql);
    if (!$stmt) die("Erro: " . $conn->error);
    
    if ($params) {
        $stmt->bind_param($types, ...$params);
    }
    
    $stmt->execute();
    $res = $stmt->get_result();
    $dados = $res->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    
    $labels = [];
    $envios = [];
    $respostas = [];
    $taxas = [];
    
    foreach ($dados as $item) {
        $labels[] = $item['formulario'];
        $envios[] = (int)$item['total_envios'];
        $respostas[] = (int)$item['respostas'];
        $taxas[] = (float)$item['taxa_resposta'];
    }
    
    $taxa_media = count($taxas) > 0 ? array_sum($taxas) / count($taxas) : 0;
    
    return [
        'labels' => $labels,
        'envios' => $envios,
        'respostas' => $respostas,
        'taxas' => $taxas,
        'taxa_media' => $taxa_media,
        'dados_completos' => $dados
    ];
}

// ----------------------------
// FUNÇÕES EXISTENTES (CORRIGIDAS)
// ----------------------------

function carregarClientes($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    if ($ver_todos) {
        $sql = "SELECT id, Nome_Cliente FROM clientes WHERE deletado_em IS NULL AND tenant_id = ? ORDER BY Nome_Cliente";
        $stmt = $conn->prepare($sql);
        if (!$stmt) die("Erro: " . $conn->error);
        $stmt->bind_param("i", $tenant_id);
    } else {
        $sql = "SELECT c.id, c.Nome_Cliente 
                FROM clientes c
                LEFT JOIN permissoes_clientes pc ON c.id = pc.cliente_id AND pc.usuario_id = ?
                WHERE c.deletado_em IS NULL 
                AND c.tenant_id = ?
                AND (c.usuario_cadastro = ? OR pc.visualizar = 1)
                ORDER BY c.Nome_Cliente";
        $stmt = $conn->prepare($sql);
        if (!$stmt) die("Erro: " . $conn->error);
        $stmt->bind_param("iii", $usuario_id, $tenant_id, $usuario_id);
    }
    
    $stmt->execute();
    $res = $stmt->get_result();
    $clientes = $res->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    return $clientes ?: [];
}

function carregarProdutos($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    if ($ver_todos) {
        $sql = "SELECT DISTINCT nome_produto FROM cliente_produtos WHERE tenant_id = ? AND nome_produto IS NOT NULL AND nome_produto != '' ORDER BY nome_produto";
        $stmt = $conn->prepare($sql);
        if (!$stmt) die("Erro: " . $conn->error);
        $stmt->bind_param("i", $tenant_id);
    } else {
        $sql = "SELECT DISTINCT cp.nome_produto 
                FROM cliente_produtos cp
                JOIN clientes c ON cp.cliente_id = c.id
                LEFT JOIN permissoes_clientes pc ON c.id = pc.cliente_id AND pc.usuario_id = ?
                WHERE cp.tenant_id = ?
                AND cp.nome_produto IS NOT NULL
                AND cp.nome_produto != ''
                AND (c.usuario_cadastro = ? OR pc.visualizar = 1)
                ORDER BY cp.nome_produto";
        $stmt = $conn->prepare($sql);
        if (!$stmt) die("Erro: " . $conn->error);
        $stmt->bind_param("iii", $usuario_id, $tenant_id, $usuario_id);
    }
    
    $stmt->execute();
    $res = $stmt->get_result();
    $produtos = $res->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    return $produtos ?: [];
}

function carregarOrigens($conn, $tenant_id) {
    $sql = "SELECT id, nome FROM origens WHERE tenant_id = ? AND ativo = 1 ORDER BY nome";
    $stmt = $conn->prepare($sql);
    if (!$stmt) die("Erro: " . $conn->error);
    $stmt->bind_param("i", $tenant_id);
    $stmt->execute();
    $res = $stmt->get_result();
    $origens = $res->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    return $origens ?: [];
}

// 11. PRODUTOS VENDIDOS - CORRIGIDO
function carregarDadosProdutosVendidos($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $data_inicio = null, $data_fim = null, $cliente_id = null, $produto = null, $Origem = null, $limit = 10) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    $sql = "SELECT 
                cp.nome_produto,
                SUM(cp.quantidade) as total_quantidade,
                SUM(cp.valor * cp.quantidade) as valor_total
            FROM cliente_produtos cp
            JOIN clientes c ON cp.cliente_id = c.id
            WHERE cp.tenant_id = ?
              AND cp.nome_produto IS NOT NULL
              AND cp.nome_produto != ''";
    
    $params = [$tenant_id];
    $types = "i";
    
    if (!$ver_todos) {
        $sql .= " AND (c.usuario_cadastro = ? OR EXISTS (
                    SELECT 1 FROM permissoes_clientes pc 
                    WHERE pc.cliente_id = c.id 
                    AND pc.usuario_id = ? 
                    AND pc.visualizar = 1
                ))";
        $params[] = $usuario_id;
        $params[] = $usuario_id;
        $types .= "ii";
    }
    
    if ($data_inicio) {
        $sql .= " AND DATE(cp.data_cadastro) >= ?";
        $params[] = $data_inicio;
        $types .= "s";
    }
    
    if ($data_fim) {
        $sql .= " AND DATE(cp.data_cadastro) <= ?";
        $params[] = $data_fim;
        $types .= "s";
    }
    
    if ($cliente_id) {
        $sql .= " AND cp.cliente_id = ?";
        $params[] = $cliente_id;
        $types .= "i";
    }
    
    if ($produto) {
        $sql .= " AND cp.nome_produto = ?";
        $params[] = $produto;
        $types .= "s";
    }

    if ($Origem) {
        $sql .= " AND c.Origem = ?";
        $params[] = $Origem;
        $types .= "s";
    }
    
    $sql .= " GROUP BY cp.nome_produto
              ORDER BY valor_total DESC
              LIMIT ?";
    
    $params[] = $limit;
    $types .= "i";
    
    $stmt = $conn->prepare($sql);
    if (!$stmt) die("Erro: " . $conn->error);
    
    if ($params) {
        $stmt->bind_param($types, ...$params);
    }
    
    $stmt->execute();
    $res = $stmt->get_result();
    $dados = $res->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    
    $labels = [];
    $quantidades = [];
    $valores = [];
    
    foreach ($dados as $produto) {
        $labels[] = $produto['nome_produto'];
        $quantidades[] = (float)$produto['total_quantidade'];
        $valores[] = (float)$produto['valor_total'];
    }
    
    $total_quantidade = array_sum($quantidades);
    $total_valor = array_sum($valores);
    
    return [
        'labels' => $labels,
        'quantidades' => $quantidades,
        'valores' => $valores,
        'total_quantidade' => $total_quantidade,
        'total_valor' => $total_valor,
        'dados_completos' => $dados
    ];
}

function carregarDadosAtividades($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $data_inicio = null, $data_fim = null, $Origem = null, $filtro_status = null) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    $sql = "SELECT 
                u.id AS usuario_id, 
                u.nome AS usuario_nome,
                SUM(a.concluida = 1) AS concluidas,
                SUM(a.concluida = 0 AND a.data_agendada < CURDATE()) AS atrasadas,
                SUM(a.concluida = 0 AND a.data_agendada >= CURDATE()) AS futuras,
                COUNT(*) AS total
            FROM atividades a
            JOIN usuarios u ON a.usuario_id = u.id
            WHERE u.ativo = 'sim'
              AND u.tenant_id = ?
              AND a.tenant_id = ?
              AND a.data_agendada IS NOT NULL";
    
    $params = [$tenant_id, $tenant_id];
    $types = "ii";

    if (!$ver_todos) {
        $sql .= " AND a.usuario_id = ?";
        $params[] = $usuario_id;
        $types .= "i";
    }

    if ($filtro_status) {
        switch ($filtro_status) {
            case 'concluidas':
                $sql .= " AND a.concluida = 1";
                break;
            case 'atrasadas':
                $sql .= " AND a.concluida = 0 AND a.data_agendada < CURDATE()";
                break;
            case 'futuras':
                $sql .= " AND a.concluida = 0 AND a.data_agendada >= CURDATE()";
                break;
        }
    }

    if ($data_inicio) {
        $sql .= " AND DATE(a.data_agendada) >= ?";
        $params[] = $data_inicio;
        $types .= "s";
    }

    if ($data_fim) {
        $sql .= " AND DATE(a.data_agendada) <= ?";
        $params[] = $data_fim;
        $types .= "s";
    }

    $sql .= " GROUP BY u.id, u.nome
              ORDER BY u.nome";

    $stmt = $conn->prepare($sql);
    if (!$stmt) die("Erro ao preparar a consulta: " . $conn->error);

    if (!empty($params)) {
        $stmt->bind_param($types, ...$params);
    }

    $stmt->execute();
    $res = $stmt->get_result();
    $dados = $res->fetch_all(MYSQLI_ASSOC);
    $stmt->close();

    $labels = [];
    $concluidas = [];
    $atrasadas = [];
    $futuras = [];
    $totais = [];

    foreach ($dados as $linha) {
        $labels[] = $linha['usuario_nome'];
        $concluidas[] = (int)$linha['concluidas'];
        $atrasadas[] = (int)$linha['atrasadas'];
        $futuras[] = (int)$linha['futuras'];
        $totais[] = (int)$linha['total'];
    }

    $total_geral = array_sum($totais);

    return [
        'labels' => $labels,
        'concluidas' => $concluidas,
        'atrasadas' => $atrasadas,
        'futuras' => $futuras,
        'totais' => $totais,
        'total_geral' => $total_geral,
        'dados_completos' => $dados
    ];
}

// 12. EVOLUÇÃO DE VENDAS - CORRIGIDO
function carregarDadosEvolucaoVendas($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $data_inicio = null, $data_fim = null, $cliente_id = null, $produto = null, $Origem = null) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    $sql = "SELECT 
                DATE(cp.data_cadastro) as data, 
                SUM(cp.valor * cp.quantidade) as valor_total,
                COUNT(DISTINCT cp.cliente_id) as clientes_unicos
            FROM cliente_produtos cp
            JOIN clientes c ON cp.cliente_id = c.id
            WHERE cp.tenant_id = ?";
    
    $params = [$tenant_id];
    $types = "i";
    
    if (!$ver_todos) {
        $sql .= " AND (c.usuario_cadastro = ? OR EXISTS (
                    SELECT 1 FROM permissoes_clientes pc 
                    WHERE pc.cliente_id = c.id 
                    AND pc.usuario_id = ? 
                    AND pc.visualizar = 1
                ))";
        $params[] = $usuario_id;
        $params[] = $usuario_id;
        $types .= "ii";
    }
    
    if ($data_inicio) {
        $sql .= " AND DATE(cp.data_cadastro) >= ?";
        $params[] = $data_inicio;
        $types .= "s";
    }
    
    if ($data_fim) {
        $sql .= " AND DATE(cp.data_cadastro) <= ?";
        $params[] = $data_fim;
        $types .= "s";
    }
    
    if ($cliente_id) {
        $sql .= " AND cp.cliente_id = ?";
        $params[] = $cliente_id;
        $types .= "i";
    }
    
    if ($produto) {
        $sql .= " AND cp.nome_produto = ?";
        $params[] = $produto;
        $types .= "s";
    }

    if ($Origem) {
        $sql .= " AND c.Origem = ?";
        $params[] = $Origem;
        $types .= "s";
    }
    
    $sql .= " GROUP BY DATE(cp.data_cadastro)
              ORDER BY DATE(cp.data_cadastro)";
    
    $stmt = $conn->prepare($sql);
    if (!$stmt) die("Erro: " . $conn->error);
    
    if ($params) {
        $stmt->bind_param($types, ...$params);
    }
    
    $stmt->execute();
    $res = $stmt->get_result();
    $dados = $res->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    
    $labels = [];
    $valores = [];
    $clientes = [];
    
    foreach ($dados as $item) {
        $labels[] = $item['data'];
        $valores[] = (float)$item['valor_total'];
        $clientes[] = (int)$item['clientes_unicos'];
    }
    
    $total_valor = array_sum($valores);
    $total_clientes = array_sum($clientes);
    
    return [
        'labels' => $labels,
        'valores' => $valores,
        'clientes' => $clientes,
        'total_valor' => $total_valor,
        'total_clientes' => $total_clientes,
        'dados_completos' => $dados
    ];
}

// ----------------------------
// CONFIGURAÇÃO E PROCESSAMENTO
// ----------------------------

// Definir datas padrão
$data_fim_padrao = date('Y-m-d');
$data_inicio_padrao = date('Y-m-d', strtotime('-30 days'));

// Processar filtros
$filtros = [
    'data_inicio' => $_GET['data_inicio'] ?? $data_inicio_padrao,
    'data_fim' => $_GET['data_fim'] ?? $data_fim_padrao,
    'cliente_id' => $_GET['cliente_id'] ?? 0,
    'produto' => $_GET['produto'] ?? '',
    'status' => $_GET['status'] ?? -1,
    'tipo_grafico' => $_GET['tipo_grafico'] ?? 'dashboard_completo',
    'eixo_x' => $_GET['eixo_x'] ?? 'status',
    'eixo_y' => $_GET['eixo_y'] ?? 'valor_total',
    'tipo_visualizacao' => $_GET['tipo_visualizacao'] ?? 'bar',
    'meta' => $_GET['meta'] ?? 0,
    'ano' => $_GET['ano'] ?? date('Y'),
    'Origem' => $_GET['Origem'] ?? 0,
    'filtro_atividades' => $_GET['filtro_atividades'] ?? 'todos',
    'tipo_cliente' => $_GET['tipo_cliente'] ?? 'todos'
];

// Carregar dados para filtros
$clientes = carregarClientes($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin);
$produtos = carregarProdutos($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin);
$origens = carregarOrigens($conn, $tenant_id);

// Carregar dados para o gráfico selecionado
$dados_grafico = [];
$titulo_grafico = 'Dashboard Executivo';
$chart_labels = [];
$chart_datasets = [];
$tem_dados = false;
$tipo_visualizacao_multiplo = false;

// Switch expandido com novas opções de gráficos
switch ($filtros['tipo_grafico']) {
    // NOVOS GRÁFICOS ANALÍTICOS
    case 'performance_funil':
        $titulo_grafico = 'Performance do Funil de Vendas';
        $dados = carregarDadosPerformanceFunil(
            $conn, 
            $tenant_id,
            $usuario_id,
            $is_admin,
            $is_super_admin,
            $filtros['data_inicio'], 
            $filtros['data_fim']
        );
        
        $dados_grafico = $dados['dados_completos'];
        $chart_labels = $dados['labels'];
        $tem_dados = !empty($dados['dados_completos']);
        $tipo_visualizacao_multiplo = true;
        
        $chart_datasets = [
            'Clientes por Etapa' => $dados['clientes'],
            'Percentual (%)' => $dados['percentuais']
        ];
        break;
        
    case 'clientes_perdidos':
        $titulo_grafico = 'Análise de Clientes Perdidos';
        $dados = carregarDadosClientesPerdidos(
            $conn, 
            $tenant_id,
            $usuario_id,
            $is_admin,
            $is_super_admin,
            $filtros['data_inicio'], 
            $filtros['data_fim']
        );
        
        $dados_grafico = $dados['dados_completos'];
        $chart_labels = $dados['labels'];
        $tem_dados = !empty($dados['dados_completos']);
        $tipo_visualizacao_multiplo = true;
        
        $chart_datasets = [
            'Clientes Perdidos' => $dados['perdidos'],
            'Percentual (%)' => $dados['percentuais']
        ];
        break;
        
    case 'atividades_detalhadas':
        $titulo_grafico = 'Análise Detalhada de Atividades';
        $dados = carregarDadosAtividadesDetalhadas(
            $conn, 
            $tenant_id,
            $usuario_id,
            $is_admin,
            $is_super_admin,
            $filtros['data_inicio'], 
            $filtros['data_fim']
        );
        
        $dados_grafico = $dados['dados_completos'];
        $chart_labels = $dados['labels'];
        $tem_dados = !empty($dados['dados_completos']);
        $tipo_visualizacao_multiplo = true;
        
        $chart_datasets = [
            'Concluídas' => $dados['concluidas'],
            'Pendentes' => $dados['pendentes']
        ];
        break;
        
    case 'fluxos_automatizados':
        $titulo_grafico = 'Desempenho dos Fluxos Automatizados';
        $dados = carregarDadosFluxosAutomatizados(
            $conn, 
            $tenant_id,
            $usuario_id,
            $is_admin,
            $is_super_admin,
            $filtros['data_inicio'], 
            $filtros['data_fim']
        );
        
        $dados_grafico = $dados['dados_completos'];
        $chart_labels = $dados['labels'];
        $tem_dados = !empty($dados['dados_completos']);
        $tipo_visualizacao_multiplo = true;
        
        $chart_datasets = [
            'Atividades Geradas' => $dados['atividades'],
            'Emails Agendados' => $dados['emails'],
            'Logs Gerados' => $dados['logs']
        ];
        break;
        
    case 'conversao_origem':
        $titulo_grafico = 'Taxa de Conversão por Origem';
        $dados = carregarDadosConversaoOrigem(
            $conn, 
            $tenant_id,
            $usuario_id,
            $is_admin,
            $is_super_admin,
            $filtros['data_inicio'], 
            $filtros['data_fim']
        );
        
        $dados_grafico = $dados['dados_completos'];
        $chart_labels = $dados['labels'];
        $tem_dados = !empty($dados['dados_completos']);
        $tipo_visualizacao_multiplo = true;
        
        $chart_datasets = [
            'Total Clientes' => $dados['clientes'],
            'Clientes Concluídos' => $dados['concluidos'],
            'Taxa Conversão (%)' => $dados['taxas']
        ];
        break;
        
    case 'tempo_etapa':
        $titulo_grafico = 'Tempo Médio por Etapa';
        $dados = carregarDadosTempoEtapa(
            $conn, 
            $tenant_id,
            $usuario_id,
            $is_admin,
            $is_super_admin,
            $filtros['data_inicio'], 
            $filtros['data_fim']
        );
        
        $dados_grafico = $dados['dados_completos'];
        $chart_labels = $dados['labels'];
        $tem_dados = !empty($dados['dados_completos']);
        $tipo_visualizacao_multiplo = true;
        
        $chart_datasets = [
            'Movimentações' => $dados['movimentacoes'],
            'Tempo Médio (horas)' => $dados['tempos']
        ];
        break;
        
    case 'produtividade_usuario':
        $titulo_grafico = 'Produtividade por Usuário';
        $dados = carregarDadosProdutividadeUsuario(
            $conn, 
            $tenant_id,
            $usuario_id,
            $is_admin,
            $is_super_admin,
            $filtros['data_inicio'], 
            $filtros['data_fim']
        );
        
        $dados_grafico = $dados['dados_completos'];
        $chart_labels = $dados['labels'];
        $tem_dados = !empty($dados['dados_completos']);
        $tipo_visualizacao_multiplo = true;
        
        $chart_datasets = [
            'Atividades' => $dados['atividades'],
            'Concluídas' => $dados['concluidas'],
            'Produtos Vendidos' => $dados['produtos'],
            'Logs Registrados' => $dados['logs'],
            'Clientes Cadastrados' => $dados['clientes']
        ];
        break;
        
    case 'crescimento_clientes':
        $titulo_grafico = 'Crescimento de Clientes';
        $dados = carregarDadosCrescimentoClientes(
            $conn, 
            $tenant_id,
            $usuario_id,
            $is_admin,
            $is_super_admin,
            $filtros['ano']
        );
        
        $dados_grafico = $dados['dados_completos'];
        $chart_labels = $dados['labels'];
        $tem_dados = !empty($dados['dados_completos']);
        $tipo_visualizacao_multiplo = true;
        
        $chart_datasets = [
            'Novos Clientes' => $dados['novos'],
            'Clientes Concluídos' => $dados['concluidos'],
            'Variação Mensal' => $dados['variacoes']
        ];
        break;
        
    case 'ticket_medio':
        $titulo_grafico = 'Análise de Ticket Médio';
        $dados = carregarDadosTicketMedio(
            $conn, 
            $tenant_id,
            $usuario_id,
            $is_admin,
            $is_super_admin,
            $filtros['data_inicio'], 
            $filtros['data_fim']
        );
        
        $dados_grafico = $dados['dados_completos'];
        $chart_labels = $dados['labels'];
        $tem_dados = !empty($dados['dados_completos']);
        $tipo_visualizacao_multiplo = true;
        
        $chart_datasets = [
            'Valor Total (R$)' => $dados['valores'],
            'Ticket Médio (R$)' => $dados['tickets'],
            'Clientes' => $dados['clientes']
        ];
        break;
        
    case 'satisfacao_cliente':
        $titulo_grafico = 'Satisfação do Cliente (Formulários)';
        $dados = carregarDadosSatisfacao(
            $conn, 
            $tenant_id,
            $usuario_id,
            $is_admin,
            $is_super_admin,
            $filtros['data_inicio'], 
            $filtros['data_fim']
        );
        
        $dados_grafico = $dados['dados_completos'];
        $chart_labels = $dados['labels'];
        $tem_dados = !empty($dados['dados_completos']);
        $tipo_visualizacao_multiplo = true;
        
        $chart_datasets = [
            'Envios' => $dados['envios'],
            'Respostas' => $dados['respostas'],
            'Taxa Resposta (%)' => $dados['taxas']
        ];
        break;
        
    // DASHBOARD COMPLETO
    case 'dashboard_completo':
        $titulo_grafico = 'Dashboard Executivo Completo';
        // Carregar múltiplos conjuntos de dados
        $dados_funil = carregarDadosPerformanceFunil($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $filtros['data_inicio'], $filtros['data_fim']);
        $dados_vendas = carregarDadosProdutosVendidos($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $filtros['data_inicio'], $filtros['data_fim']);
        $dados_atividades = carregarDadosAtividades($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $filtros['data_inicio'], $filtros['data_fim']);
        $dados_conversao = carregarDadosConversaoOrigem($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $filtros['data_inicio'], $filtros['data_fim']);
        
        $dados_grafico = array_merge(
            $dados_funil['dados_completos'],
            $dados_vendas['dados_completos'],
            $dados_atividades['dados_completos'],
            $dados_conversao['dados_completos']
        );
        
        $tem_dados = !empty($dados_grafico);
        $tipo_visualizacao_multiplo = true;
        
        // Para o dashboard completo, usaremos mini-gráficos no front-end
        $chart_labels = ['Resumo Executivo'];
        $chart_datasets = [
            'Clientes no Funil' => [$dados_funil['total_clientes'] ?? 0],
            'Vendas (R$)' => [$dados_vendas['total_valor'] ?? 0],
            'Atividades' => [$dados_atividades['total_geral'] ?? 0],
            'Taxa Conversão Média (%)' => [$dados_conversao['media_taxa'] ?? 0]
        ];
        break;
        
    // GRÁFICOS ORIGINAIS
    case 'produtos_vendidos':
        $titulo_grafico = 'Produtos Mais Vendidos';
        $dados = carregarDadosProdutosVendidos(
            $conn, 
            $tenant_id,
            $usuario_id,
            $is_admin,
            $is_super_admin,
            $filtros['data_inicio'], 
            $filtros['data_fim'],
            !empty($filtros['cliente_id']) && $filtros['cliente_id'] > 0 ? $filtros['cliente_id'] : null,
            !empty($filtros['produto']) ? $filtros['produto'] : null,
            !empty($filtros['Origem']) && $filtros['Origem'] > 0 ? $filtros['Origem'] : null
        );
        
        $dados_grafico = $dados['dados_completos'];
        $chart_labels = $dados['labels'];
        $tem_dados = !empty($dados['dados_completos']);
        
        if ($filtros['eixo_y'] == 'valor_total') {
            $chart_datasets = ['Valor Total (R$)' => $dados['valores']];
        } else {
            $chart_datasets = ['Quantidade' => $dados['quantidades']];
        }
        break;
        
    case 'atividades_conclusao':
        $titulo_grafico = 'Atividades por Conclusão';
        $dados = carregarDadosAtividades(
            $conn, 
            $tenant_id,
            $usuario_id,
            $is_admin,
            $is_super_admin,
            $filtros['data_inicio'], 
            $filtros['data_fim'],
            !empty($filtros['Origem']) && $filtros['Origem'] > 0 ? $filtros['Origem'] : null,
            $filtros['filtro_atividades'] != 'todos' ? $filtros['filtro_atividades'] : null
        );
        
        $dados_grafico = $dados['dados_completos'];
        $chart_labels = $dados['labels'];
        $tem_dados = !empty($dados['dados_completos']);
        
        $chart_datasets = [
            'Concluídas' => $dados['concluidas'],
            'Atrasadas' => $dados['atrasadas'],
            'Futuras' => $dados['futuras']
        ];
        break;
        
    case 'evolucao_vendas':
        $titulo_grafico = 'Evolução de Vendas';
        $dados = carregarDadosEvolucaoVendas(
            $conn, 
            $tenant_id,
            $usuario_id,
            $is_admin,
            $is_super_admin,
            $filtros['data_inicio'], 
            $filtros['data_fim'],
            !empty($filtros['cliente_id']) && $filtros['cliente_id'] > 0 ? $filtros['cliente_id'] : null,
            !empty($filtros['produto']) ? $filtros['produto'] : null,
            !empty($filtros['Origem']) && $filtros['Origem'] > 0 ? $filtros['Origem'] : null
        );
        
        $dados_grafico = $dados['dados_completos'];
        $chart_labels = $dados['labels'];
        $tem_dados = !empty($dados['dados_completos']);
        
        if ($filtros['eixo_y'] == 'valor_total') {
            $chart_datasets = ['Valor Total (R$)' => $dados['valores']];
        } else {
            $chart_datasets = ['Clientes Únicos' => $dados['clientes']];
        }
        break;
        
    default:
        // Por padrão, mostrar dashboard completo
        $titulo_grafico = 'Dashboard Executivo Completo';
        $dados_funil = carregarDadosPerformanceFunil($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $filtros['data_inicio'], $filtros['data_fim']);
        $dados_vendas = carregarDadosProdutosVendidos($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $filtros['data_inicio'], $filtros['data_fim']);
        
        $dados_grafico = array_merge($dados_funil['dados_completos'], $dados_vendas['dados_completos']);
        $tem_dados = !empty($dados_grafico);
        $tipo_visualizacao_multiplo = true;
        
        $chart_labels = ['Resumo Executivo'];
        $chart_datasets = [
            'Clientes no Funil' => [$dados_funil['total_clientes'] ?? 0],
            'Vendas (R$)' => [$dados_vendas['total_valor'] ?? 0]
        ];
        break;
}

// Exibir mensagem de sucesso se existir
if (isset($_SESSION['mensagem'])) {
    echo '<div style="position: fixed; top: 80px; right: 20px; padding: 10px 20px; background: #2ecc71; color: white; border-radius: 4px; z-index: 2000;">'
       . htmlspecialchars($_SESSION['mensagem'])
       . '</div>';
    
    unset($_SESSION['mensagem']);
    
    echo '<script>
            setTimeout(function() {
                document.querySelector("div[style*=\'position: fixed\']").style.display = "none";
            }, 3000);
          </script>';
}
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>SON - Dashboard Analítico Executivo</title>
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon_io/favicon-16x16.png">
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon_io/favicon-32x32.png">
    <meta name="csrf-token" content="<?= htmlspecialchars($_SESSION['csrf_token']) ?>">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@2.0.0"></script>
    <script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-annotation@1.0.2"></script>
    <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
    <style>
        /* ESTILOS OTIMIZADOS PARA DASHBOARD EXECUTIVO */
        :root {
            --primary-color: #3498db;
            --secondary-color: #2c3e50;
            --accent-color: #e74c3c;
            --success-color: #2ecc71;
            --warning-color: #f39c12;
            --info-color: #1abc9c;
            --light-color: #ecf0f1;
            --dark-color: #2c3e50;
            --gray-color: #95a5a6;
        }

        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }

        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            margin: 0;
            padding: 0;
            background-color: #f5f7fa;
            color: #333;
            line-height: 1.6;
        }

        .header-fixed {
            position: fixed;
            top: 0;
            left: 0;
            right: 0;
            background-color: white;
            padding: 15px 20px;
            z-index: 1000;
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
            display: flex;
            justify-content: space-between;
            align-items: center;
            height: 70px;
        }
        
        .header-fixed img {
            height: 40px;
            margin-right: 15px;
        }
        
        .header-title {
            margin: 0;
            flex-grow: 1;
            text-align: center;
            color: var(--secondary-color);
            font-size: 1.5rem;
            font-weight: 600;
        }
        
        .user-initial {
            width: 40px;
            height: 40px;
            border-radius: 50%;
            background: #ccc;
            display: flex;
            align-items: center;
            justify-content: center;
            font-weight: bold;
            font-size: 1.2em;
        }
        
        .permission-badge {
            display: inline-block;
            padding: 4px 10px;
            border-radius: 20px;
            font-size: 0.8em;
            font-weight: 600;
        }
        
        .permission-admin {
            background-color: var(--primary-color);
            color: white;
        }
        
        .permission-user {
            background-color: var(--gray-color);
            color: white;
        }
        
        .permission-super-admin {
            background-color: var(--accent-color);
            color: white;
        }

        .sidebar {
            position: fixed;
            top: 70px;
            left: 0;
            bottom: 0;
            width: 250px;
            background-color: var(--secondary-color);
            color: white;
            padding-top: 20px;
            overflow-y: auto;
            z-index: 900;
            transition: all 0.3s ease;
        }
        
        .sidebar.collapsed {
            width: 70px;
        }
        
        .sidebar-toggle {
            position: absolute;
            top: 10px;
            right: 10px;
            background: rgba(255,255,255,0.1);
            border: none;
            color: white;
            border-radius: 4px;
            width: 30px;
            height: 30px;
            cursor: pointer;
            display: flex;
            align-items: center;
            justify-content: center;
        }
        
        .sidebar a {
            display: flex;
            align-items: center;
            color: white;
            padding: 15px 20px;
            text-decoration: none;
            transition: background-color 0.3s;
            border-left: 4px solid transparent;
        }
        
        .sidebar a i {
            margin-right: 10px;
            width: 20px;
            text-align: center;
        }
        
        .sidebar.collapsed a span {
            display: none;
        }
        
        .sidebar.collapsed a i {
            margin-right: 0;
        }
        
        .sidebar a:hover, .sidebar a.active {
            background-color: rgba(255,255,255,0.1);
            border-left-color: var(--primary-color);
        }
        
        .content-wrapper {
            margin-top: 20px;
            padding: 60px;
            margin-right: 80px;
            margin-left: 80px;
            transition: margin-left 0.3s ease;
        }
        
        .content-wrapper.expanded {
            margin-left: 70px;
        }
        
        .container {
            max-width: 1400px;
            margin: 0 auto;
        }
        
        .page-header {
            display: flex;
            align-items: center;
            justify-content: space-between;
            margin-bottom: 25px;
            padding-bottom: 15px;
            border-bottom: 1px solid #eee;
        }
        
        .page-title {
            color: var(--secondary-color);
            font-size: 1.8rem;
            font-weight: 600;
            display: flex;
            align-items: center;
            gap: 12px;
        }
        
        .page-actions {
            display: flex;
            gap: 10px;
        }
        
        .alert {
            padding: 12px 15px;
            margin-bottom: 20px;
            border-radius: 6px;
            display: flex;
            align-items: center;
            gap: 10px;
        }
        
        .alert-warning {
            background-color: #fff3cd;
            color: #856404;
            border: 1px solid #ffeaa7;
        }
        
        .filtros-container {
            background: #f8f9fa;
            padding: 20px;
            border-radius: 8px;
            margin-bottom: 25px;
            box-shadow: 0 2px 5px rgba(0,0,0,0.05);
        }
        
        .filtros-grid-4col {
            display: grid;
            grid-template-columns: repeat(4, 1fr);
            gap: 20px;
            margin-bottom: 15px;
        }
        
        .filtros-coluna {
            display: flex;
            flex-direction: column;
            gap: 15px;
        }
        
        .filtro-group {
            margin-bottom: 0;
        }
        
        .filtro-group label {
            display: block;
            margin-bottom: 6px;
            font-weight: 600;
            color: var(--dark-color);
            font-size: 0.9rem;
        }
        
        .filtro-group select, 
        .filtro-group input {
            width: 100%;
            padding: 10px 12px;
            border: 1px solid #ddd;
            border-radius: 6px;
            font-size: 0.95rem;
            transition: border-color 0.3s;
        }
        
        .filtro-group select:focus, 
        .filtro-group input:focus {
            border-color: var(--primary-color);
            outline: none;
            box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);
        }
        
        .filtros-condicionais {
            display: flex;
            gap: 20px;
            margin-bottom: 15px;
            padding: 15px;
            background: #f8f9fa;
            border-radius: 6px;
            border: 1px solid #e9ecef;
        }
        
        .filtros-condicionais .filtro-group {
            flex: 1;
        }
        
        .filtros-actions {
            display: flex;
            gap: 10px;
            justify-content: flex-end;
            border-top: 1px solid #eee;
            padding-top: 15px;
            margin-top: 10px;
        }
        
        .btn {
            display: inline-flex;
            align-items: center;
            justify-content: center;
            gap: 8px;
            padding: 10px 18px;
            border-radius: 6px;
            text-decoration: none;
            font-size: 0.95rem;
            font-weight: 500;
            cursor: pointer;
            transition: all 0.2s ease;
            border: none;
        }
        
        .btn-sm {
            padding: 8px 14px;
            font-size: 0.85rem;
        }
        
        .btn-primary {
            background-color: var(--primary-color);
            color: white;
        }
        
        .btn-primary:hover {
            background-color: #2980b9;
            transform: translateY(-2px);
            box-shadow: 0 4px 8px rgba(0,0,0,0.1);
        }
        
        .btn-secondary {
            background-color: var(--gray-color);
            color: white;
        }
        
        .btn-secondary:hover {
            background-color: #7f8c8d;
        }
        
        .btn-success {
            background-color: var(--success-color);
            color: white;
        }
        
        .btn-success:hover {
            background-color: #27ae60;
        }
        
        .btn-danger {
            background-color: var(--accent-color);
            color: white;
        }
        
        .btn-danger:hover {
            background-color: #c0392b;
        }
        
        /* NOVO: DASHBOARD EM GRADE */
        .dashboard-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
            gap: 25px;
            margin-bottom: 25px;
        }
        
        .dashboard-card {
            background: white;
            border-radius: 10px;
            padding: 20px;
            box-shadow: 0 3px 15px rgba(0,0,0,0.08);
            transition: transform 0.3s ease, box-shadow 0.3s ease;
            border: 1px solid #e9ecef;
        }
        
        .dashboard-card:hover {
            transform: translateY(-5px);
            box-shadow: 0 5px 20px rgba(0,0,0,0.12);
        }
        
        .card-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 15px;
            padding-bottom: 10px;
            border-bottom: 1px solid #eee;
        }
        
        .card-title {
            font-size: 1.1rem;
            font-weight: 600;
            color: var(--secondary-color);
            display: flex;
            align-items: center;
            gap: 8px;
        }
        
        .card-actions {
            display: flex;
            gap: 5px;
        }
        
        .card-content {
            min-height: 200px;
            position: relative;
        }
        
        .mini-chart {
            height: 180px;
            width: 100%;
        }
        
        .stats-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
            gap: 20px;
            margin-bottom: 25px;
        }
        
        .stat-card {
            background: white;
            border-radius: 8px;
            padding: 20px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.05);
            display: flex;
            flex-direction: column;
            transition: transform 0.3s ease;
        }
        
        .stat-card:hover {
            transform: translateY(-3px);
        }
        
        .stat-icon {
            width: 50px;
            height: 50px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            margin-bottom: 15px;
            font-size: 1.5rem;
        }
        
        .stat-icon.primary {
            background-color: rgba(52, 152, 219, 0.1);
            color: var(--primary-color);
        }
        
        .stat-icon.success {
            background-color: rgba(46, 204, 113, 0.1);
            color: var(--success-color);
        }
        
        .stat-icon.warning {
            background-color: rgba(243, 156, 18, 0.1);
            color: var(--warning-color);
        }
        
        .stat-icon.danger {
            background-color: rgba(231, 76, 60, 0.1);
            color: var(--accent-color);
        }
        
        .stat-icon.info {
            background-color: rgba(26, 188, 156, 0.1);
            color: var(--info-color);
        }
        
        .stat-value {
            font-size: 1.8rem;
            font-weight: 700;
            margin-bottom: 5px;
            color: var(--dark-color);
        }
        
        .stat-label {
            color: var(--gray-color);
            font-size: 0.9rem;
            font-weight: 500;
        }
        
        .chart-container {
            background: #fff;
            border: 1px solid #e9ecef;
            padding: 20px;
            border-radius: 8px;
            margin-bottom: 25px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.03);
        }
        
        .chart-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 20px;
            padding-bottom: 15px;
            border-bottom: 1px solid #eee;
        }
        
        .chart-title {
            font-size: 1.3rem;
            font-weight: 600;
            color: var(--secondary-color);
        }
        
        .chart-actions {
            display: flex;
            gap: 8px;
        }
        
        .chart-wrapper {
            position: relative;
            height: 450px;
            width: 100%;
        }
        
        .chart-type-selector {
            display: flex;
            gap: 10px;
            margin-top: 15px;
            flex-wrap: wrap;
        }
        
        .chart-type-btn {
            padding: 8px 15px;
            border: 1px solid #ddd;
            border-radius: 6px;
            background: white;
            cursor: pointer;
            transition: all 0.2s;
            display: flex;
            align-items: center;
            gap: 5px;
            font-size: 0.9rem;
        }
        
        .chart-type-btn.active, .chart-type-btn:hover {
            background: var(--primary-color);
            color: white;
            border-color: var(--primary-color);
        }
        
        .data-table-container {
            margin-top: 25px;
            overflow-x: auto;
        }
        
        .data-table {
            width: 100%;
            border-collapse: collapse;
            font-size: 0.9rem;
        }
        
        .data-table th, .data-table td {
            padding: 12px 15px;
            border: 1px solid #e9ecef;
            text-align: left;
        }
        
        .data-table th {
            background-color: #f8f9fa;
            font-weight: 600;
            color: var(--dark-color);
            position: sticky;
            top: 0;
        }
        
        .data-table tr:nth-child(even) {
            background-color: #f8f9fa;
        }
        
        .data-table tr:hover {
            background-color: #e9ecef;
        }
        
        .no-data {
            text-align: center;
            padding: 40px 20px;
            color: var(--gray-color);
        }
        
        .no-data i {
            font-size: 3rem;
            margin-bottom: 15px;
            opacity: 0.5;
        }
        
        .no-data h3 {
            margin-bottom: 10px;
            font-weight: 500;
        }
        
        .admin-fixed-btn {
            position: fixed;
            bottom: 25px;
            right: 25px;
            background-color: var(--primary-color);
            color: white;
            width: 60px;
            height: 60px;
            border-radius: 50%;
            display: flex;
            justify-content: center;
            align-items: center;
            cursor: pointer;
            box-shadow: 0 4px 15px rgba(0,0,0,0.2);
            z-index: 1000;
            transition: all 0.3s ease;
        }
        
        .admin-fixed-btn:hover {
            background-color: #2980b9;
            transform: translateY(-3px);
            box-shadow: 0 6px 20px rgba(0,0,0,0.25);
        }
        
        .tooltip {
            position: absolute;
            bottom: -30px;
            right: 0;
            background-color: #333;
            color: white;
            padding: 5px 10px;
            border-radius: 4px;
            font-size: 12px;
            white-space: nowrap;
            opacity: 0;
            transition: opacity 0.3s;
            pointer-events: none;
        }
        
        .admin-fixed-btn:hover .tooltip {
            opacity: 1;
        }
        
        .version-info {
            position: fixed;
            bottom: 10px;
            left: 10px;
            color: var(--gray-color);
            font-size: 0.8em;
            z-index: 900;
        }
        
        /* NOVO: INDICADORES KPI */
        .kpi-indicator {
            display: flex;
            align-items: center;
            margin-bottom: 10px;
            padding: 10px;
            background: #f8f9fa;
            border-radius: 6px;
        }
        
        .kpi-icon {
            width: 40px;
            height: 40px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            margin-right: 15px;
            font-size: 1.2rem;
        }
        
        .kpi-content {
            flex-grow: 1;
        }
        
        .kpi-value {
            font-size: 1.3rem;
            font-weight: 700;
            color: var(--dark-color);
        }
        
        .kpi-label {
            font-size: 0.85rem;
            color: var(--gray-color);
        }
        
        .kpi-trend {
            font-size: 0.9rem;
            font-weight: 600;
        }
        
        .kpi-trend.up {
            color: var(--success-color);
        }
        
        .kpi-trend.down {
            color: var(--accent-color);
        }
        
        .kpi-trend.neutral {
            color: var(--gray-color);
        }
        
        /* RESPONSIVIDADE */
        @media (max-width: 1200px) {
            .filtros-grid-4col {
                grid-template-columns: repeat(2, 1fr);
            }
            
            .dashboard-grid {
                grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
            }
        }
        
        @media (max-width: 992px) {
            .sidebar {
                width: 70px;
            }
            
            .sidebar a span {
                display: none;
            }
            
            .sidebar a i {
                margin-right: 0;
            }
            
            .content-wrapper {
                margin-left: 70px;
            }
        }
        
        @media (max-width: 768px) {
            .header-fixed {
                flex-direction: column;
                height: auto;
                padding: 10px;
            }
            
            .header-title {
                margin: 10px 0;
                font-size: 1.2rem;
            }
            
            .content-wrapper {
                margin-top: 120px;
                padding: 15px;
            }
            
            .filtros-grid-4col {
                grid-template-columns: 1fr;
                gap: 15px;
            }
            
            .dashboard-grid {
                grid-template-columns: 1fr;
            }
            
            .stats-grid {
                grid-template-columns: 1fr;
            }
            
            .chart-wrapper {
                height: 350px;
            }
            
            .filtros-condicionais {
                flex-direction: column;
                gap: 15px;
            }
        }
    </style>
</head>
<body>
  
<?php include 'menu_lateral.php'; ?>

    <div class="content-wrapper" id="contentWrapper">
        <div class="container">
            <div class="page-header">
                <h1 class="page-title">
                    <i class="fas fa-chart-network"></i>
                    Dashboard Analítico Executivo
                </h1>
                <div class="page-actions">
                    <button class="btn btn-secondary btn-sm" onclick="window.print()">
                        <i class="fas fa-print"></i> Imprimir
                    </button>
                    <button class="btn btn-success btn-sm" onclick="exportarDashboard()">
                        <i class="fas fa-file-export"></i> Exportar
                    </button>
                    <button class="btn btn-info btn-sm" onclick="atualizarDashboard()">
                        <i class="fas fa-sync-alt"></i> Atualizar
                    </button>
                </div>
            </div>
            
            <?php if (!$is_admin && !$is_super_admin): ?>
                <div class="alert alert-warning">
                    <i class="fas fa-info-circle"></i> 
                    Você está visualizando apenas os dados aos quais tem acesso.
                </div>
            <?php endif; ?>

            <!-- FILTROS AVANÇADOS -->
            <div class="filtros-container">
                <form method="GET" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" id="filtrosForm">
                    <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
                    
                    <div class="filtros-grid-4col">
                        <!-- Coluna 1 -->
                        <div class="filtros-coluna">
                            <div class="filtro-group">
                                <label for="tipo_grafico">Tipo de Análise:</label>
                                <select name="tipo_grafico" id="tipo_grafico" onchange="atualizarFiltros()">
                                    <optgroup label="Dashboard Executivo">
                                        <option value="dashboard_completo" <?= $filtros['tipo_grafico'] == 'dashboard_completo' ? 'selected' : '' ?>>Dashboard Completo</option>
                                    </optgroup>
                                    <optgroup label="Análise de Vendas">
                                        <option value="produtos_vendidos" <?= $filtros['tipo_grafico'] == 'produtos_vendidos' ? 'selected' : '' ?>>Produtos Mais Vendidos</option>
                                        <option value="evolucao_vendas" <?= $filtros['tipo_grafico'] == 'evolucao_vendas' ? 'selected' : '' ?>>Evolução de Vendas</option>
                                        <option value="ticket_medio" <?= $filtros['tipo_grafico'] == 'ticket_medio' ? 'selected' : '' ?>>Ticket Médio</option>
                                    </optgroup>
                                    <optgroup label="Performance do Funil">
                                        <option value="performance_funil" <?= $filtros['tipo_grafico'] == 'performance_funil' ? 'selected' : '' ?>>Performance do Funil</option>
                                        <option value="conversao_origem" <?= $filtros['tipo_grafico'] == 'conversao_origem' ? 'selected' : '' ?>>Taxa de Conversão</option>
                                        <option value="tempo_etapa" <?= $filtros['tipo_grafico'] == 'tempo_etapa' ? 'selected' : '' ?>>Tempo por Etapa</option>
                                    </optgroup>
                                    <optgroup label="Atividades & Produtividade">
                                        <option value="atividades_conclusao" <?= $filtros['tipo_grafico'] == 'atividades_conclusao' ? 'selected' : '' ?>>Atividades por Conclusão</option>
                                        <option value="atividades_detalhadas" <?= $filtros['tipo_grafico'] == 'atividades_detalhadas' ? 'selected' : '' ?>>Análise Detalhada</option>
                                        <option value="produtividade_usuario" <?= $filtros['tipo_grafico'] == 'produtividade_usuario' ? 'selected' : '' ?>>Produtividade por Usuário</option>
                                    </optgroup>
                                    <optgroup label="Análise de Clientes">
                                        <option value="clientes_perdidos" <?= $filtros['tipo_grafico'] == 'clientes_perdidos' ? 'selected' : '' ?>>Clientes Perdidos</option>
                                        <option value="crescimento_clientes" <?= $filtros['tipo_grafico'] == 'crescimento_clientes' ? 'selected' : '' ?>>Crescimento de Clientes</option>
                                        <option value="satisfacao_cliente" <?= $filtros['tipo_grafico'] == 'satisfacao_cliente' ? 'selected' : '' ?>>Satisfação do Cliente</option>
                                    </optgroup>
                                    <optgroup label="Automação & Sistemas">
                                        <option value="fluxos_automatizados" <?= $filtros['tipo_grafico'] == 'fluxos_automatizados' ? 'selected' : '' ?>>Fluxos Automatizados</option>
                                    </optgroup>
                                </select>
                            </div>
                            
                            <div class="filtro-group">
                                <label for="data_inicio">Data Início:</label>
                                <input type="date" name="data_inicio" id="data_inicio" value="<?= htmlspecialchars($filtros['data_inicio']) ?>">
                            </div>
                        </div>
                        
                        <!-- Coluna 2 -->
                        <div class="filtros-coluna">
                            <div class="filtro-group">
                                <label for="data_fim">Data Fim:</label>
                                <input type="date" name="data_fim" id="data_fim" value="<?= htmlspecialchars($filtros['data_fim']) ?>">
                            </div>
                            
                            <div class="filtro-group" id="filtro-cliente">
                                <label for="cliente_id">Cliente:</label>
                                <select name="cliente_id" id="cliente_id">
                                    <option value="0">Todos</option>
                                    <?php foreach ($clientes as $cliente): ?>
                                        <option value="<?= $cliente['id'] ?>" <?= $filtros['cliente_id'] == $cliente['id'] ? 'selected' : '' ?>>
                                            <?= htmlspecialchars($cliente['Nome_Cliente']) ?>
                                        </option>
                                    <?php endforeach; ?>
                                </select>
                            </div>
                        </div>
                        
                        <!-- Coluna 3 -->
                        <div class="filtros-coluna">
                            <div class="filtro-group" id="filtro-produto">
                                <label for="produto">Produto:</label>
                                <select name="produto" id="produto">
                                    <option value="">Todos</option>
                                    <?php foreach ($produtos as $prod): ?>
                                        <option value="<?= $prod['nome_produto'] ?>" <?= $filtros['produto'] == $prod['nome_produto'] ? 'selected' : '' ?>>
                                            <?= htmlspecialchars($prod['nome_produto']) ?>
                                        </option>
                                    <?php endforeach; ?>
                                </select>
                            </div>

                            <div class="filtro-group" id="filtro-origem">
                                <label for="Origem">Origem:</label>
                                <select name="Origem" id="Origem">
                                    <option value="0">Todas</option>
                                    <?php foreach ($origens as $origem): ?>
                                        <option value="<?= $origem['id'] ?>" <?= $filtros['Origem'] == $origem['id'] ? 'selected' : '' ?>>
                                            <?= htmlspecialchars($origem['nome']) ?>
                                        </option>
                                    <?php endforeach; ?>
                                </select>
                            </div>
                        </div>
                        
                        <!-- Coluna 4 -->
                        <div class="filtros-coluna">
                            <div class="filtro-group" id="filtro-eixo">
                                <label for="eixo_y">Métrica Principal:</label>
                                <select name="eixo_y" id="eixo_y">
                                    <option value="valor_total" <?= $filtros['eixo_y'] == 'valor_total' ? 'selected' : '' ?>>Valor Total</option>
                                    <option value="quantidade" <?= $filtros['eixo_y'] == 'quantidade' ? 'selected' : '' ?>>Quantidade</option>
                                    <option value="clientes" <?= $filtros['eixo_y'] == 'clientes' ? 'selected' : '' ?>>Total Clientes</option>
                                    <option value="percentual" <?= $filtros['eixo_y'] == 'percentual' ? 'selected' : '' ?>>Percentual</option>
                                </select>
                            </div>
                            
                            <div class="filtro-group">
                                <label for="meta">Meta (Valor):</label>
                                <input type="number" name="meta" id="meta" step="0.01" min="0" value="<?= htmlspecialchars($filtros['meta']) ?>">
                            </div>
                        </div>
                    </div>
                    
                    <!-- Filtros condicionais -->
                    <div class="filtros-condicionais">
                        <div class="filtro-group" id="filtro-ano">
                            <label for="ano">Ano:</label>
                            <select name="ano" id="ano">
                                <?php for ($i = date('Y') - 5; $i <= date('Y') + 1; $i++): ?>
                                    <option value="<?= $i ?>" <?= $filtros['ano'] == $i ? 'selected' : '' ?>><?= $i ?></option>
                                <?php endfor; ?>
                            </select>
                        </div>
                        
                        <div class="filtro-group" id="filtro-atividades">
                            <label for="filtro_atividades">Status Atividades:</label>
                            <select name="filtro_atividades" id="filtro_atividades">
                                <option value="todos" <?= $filtros['filtro_atividades'] == 'todos' ? 'selected' : '' ?>>Todos</option>
                                <option value="concluidas" <?= $filtros['filtro_atividades'] == 'concluidas' ? 'selected' : '' ?>>Concluídas</option>
                                <option value="atrasadas" <?= $filtros['filtro_atividades'] == 'atrasadas' ? 'selected' : '' ?>>Atrasadas</option>
                                <option value="futuras" <?= $filtros['filtro_atividades'] == 'futuras' ? 'selected' : '' ?>>Futuras</option>
                            </select>
                        </div>
                        
                        <div class="filtro-group">
                            <label for="tipo_visualizacao">Visualização:</label>
                            <select name="tipo_visualizacao" id="tipo_visualizacao">
                                <option value="bar" <?= $filtros['tipo_visualizacao'] == 'bar' ? 'selected' : '' ?>>Barras</option>
                                <option value="line" <?= $filtros['tipo_visualizacao'] == 'line' ? 'selected' : '' ?>>Linhas</option>
                                <option value="pie" <?= $filtros['tipo_visualizacao'] == 'pie' ? 'selected' : '' ?>>Pizza</option>
                                <option value="doughnut" <?= $filtros['tipo_visualizacao'] == 'doughnut' ? 'selected' : '' ?>>Rosca</option>
                                <option value="radar" <?= $filtros['tipo_visualizacao'] == 'radar' ? 'selected' : '' ?>>Radar</option>
                            </select>
                        </div>
                    </div>
                    
                    <div class="filtros-actions">
                        <button type="submit" class="btn btn-primary">
                            <i class="fas fa-filter"></i> Aplicar Filtros
                        </button>
                        <button type="button" class="btn btn-secondary" onclick="limparFiltros()">
                            <i class="fas fa-times"></i> Limpar Filtros
                        </button>
                        <button type="button" class="btn btn-info" onclick="salvarConfiguracao()">
                            <i class="fas fa-save"></i> Salvar Configuração
                        </button>
                    </div>
                </form>
            </div>

            <?php if (!$tem_dados): ?>
                <div class="no-data">
                    <i class="fas fa-chart-bar"></i>
                    <h3>Nenhum dado encontrado</h3>
                    <p>Não foram encontrados dados com os filtros atuais. Tente ajustar os critérios de busca.</p>
                </div>
            <?php else: ?>
                <!-- DASHBOARD EXECUTIVO EM GRADE -->
                <?php if ($filtros['tipo_grafico'] == 'dashboard_completo'): ?>
                    <?php
                    // Carregar todos os dados para o dashboard completo
                    $dados_funil = carregarDadosPerformanceFunil($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $filtros['data_inicio'], $filtros['data_fim']);
                    $dados_vendas = carregarDadosProdutosVendidos($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $filtros['data_inicio'], $filtros['data_fim']);
                    $dados_atividades = carregarDadosAtividades($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $filtros['data_inicio'], $filtros['data_fim']);
                    $dados_conversao = carregarDadosConversaoOrigem($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $filtros['data_inicio'], $filtros['data_fim']);
                    $dados_clientes_perdidos = carregarDadosClientesPerdidos($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $filtros['data_inicio'], $filtros['data_fim']);
                    $dados_ticket = carregarDadosTicketMedio($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $filtros['data_inicio'], $filtros['data_fim']);
                    $dados_produtividade = carregarDadosProdutividadeUsuario($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $filtros['data_inicio'], $filtros['data_fim']);
                    $dados_crescimento = carregarDadosCrescimentoClientes($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $filtros['ano']);
                    ?>
                    
                    <!-- KPI PRINCIPAIS -->
                    <div class="stats-grid">
                        <div class="stat-card">
                            <div class="stat-icon primary">
                                <i class="fas fa-funnel-dollar"></i>
                            </div>
                            <div class="stat-value"><?= number_format($dados_funil['total_clientes'] ?? 0, 0, '', '.') ?></div>
                            <div class="stat-label">Clientes no Funil</div>
                        </div>
                        
                        <div class="stat-card">
                            <div class="stat-icon success">
                                <i class="fas fa-chart-line"></i>
                            </div>
                            <div class="stat-value">R$ <?= number_format($dados_vendas['total_valor'] ?? 0, 2, ',', '.') ?></div>
                            <div class="stat-label">Faturamento Total</div>
                        </div>
                        
                        <div class="stat-card">
                            <div class="stat-icon warning">
                                <i class="fas fa-tasks"></i>
                            </div>
                            <div class="stat-value"><?= number_format($dados_atividades['total_geral'] ?? 0, 0, '', '.') ?></div>
                            <div class="stat-label">Atividades Totais</div>
                        </div>
                        
                        <div class="stat-card">
                            <div class="stat-icon danger">
                                <i class="fas fa-percentage"></i>
                            </div>
                            <div class="stat-value"><?= number_format($dados_conversao['media_taxa'] ?? 0, 1, ',', '.') ?>%</div>
                            <div class="stat-label">Conversão Média</div>
                        </div>
                    </div>
                    
                    <!-- GRID DE DASHBOARD -->
                    <div class="dashboard-grid">
                        <!-- Card 1: Performance do Funil -->
                        <div class="dashboard-card">
                            <div class="card-header">
                                <h3 class="card-title">
                                    <i class="fas fa-funnel-dollar text-primary"></i>
                                    Performance do Funil
                                </h3>
                                <div class="card-actions">
                                    <button class="btn btn-sm btn-outline-primary" onclick="abrirDetalhes('funil')">
                                        <i class="fas fa-expand"></i>
                                    </button>
                                </div>
                            </div>
                            <div class="card-content">
                                <div class="mini-chart">
                                    <canvas id="chartFunil"></canvas>
                                </div>
                                <div class="kpi-indicator">
                                    <div class="kpi-icon" style="background: rgba(52, 152, 219, 0.1); color: #3498db;">
                                        <i class="fas fa-users"></i>
                                    </div>
                                    <div class="kpi-content">
                                        <div class="kpi-value"><?= number_format($dados_funil['total_clientes'] ?? 0, 0, '', '.') ?></div>
                                        <div class="kpi-label">Total de Clientes</div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        
                        <!-- Card 2: Vendas e Produtos -->
                        <div class="dashboard-card">
                            <div class="card-header">
                                <h3 class="card-title">
                                    <i class="fas fa-chart-line text-success"></i>
                                    Vendas & Produtos
                                </h3>
                                <div class="card-actions">
                                    <button class="btn btn-sm btn-outline-success" onclick="abrirDetalhes('vendas')">
                                        <i class="fas fa-expand"></i>
                                    </button>
                                </div>
                            </div>
                            <div class="card-content">
                                <div class="mini-chart">
                                    <canvas id="chartVendas"></canvas>
                                </div>
                                <div class="kpi-indicator">
                                    <div class="kpi-icon" style="background: rgba(46, 204, 113, 0.1); color: #2ecc71;">
                                        <i class="fas fa-dollar-sign"></i>
                                    </div>
                                    <div class="kpi-content">
                                        <div class="kpi-value">R$ <?= number_format($dados_vendas['total_valor'] ?? 0, 2, ',', '.') ?></div>
                                        <div class="kpi-label">Faturamento Total</div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        
                        <!-- Card 3: Atividades e Produtividade -->
                        <div class="dashboard-card">
                            <div class="card-header">
                                <h3 class="card-title">
                                    <i class="fas fa-tasks text-warning"></i>
                                    Atividades & Produtividade
                                </h3>
                                <div class="card-actions">
                                    <button class="btn btn-sm btn-outline-warning" onclick="abrirDetalhes('atividades')">
                                        <i class="fas fa-expand"></i>
                                    </button>
                                </div>
                            </div>
                            <div class="card-content">
                                <div class="mini-chart">
                                    <canvas id="chartAtividades"></canvas>
                                </div>
                                <div class="kpi-indicator">
                                    <div class="kpi-icon" style="background: rgba(243, 156, 18, 0.1); color: #f39c12;">
                                        <i class="fas fa-check-circle"></i>
                                    </div>
                                    <div class="kpi-content">
                                        <div class="kpi-value"><?= number_format(($dados_atividades['concluidas'] ?? []) ? array_sum($dados_atividades['concluidas']) : 0, 0, '', '.') ?></div>
                                        <div class="kpi-label">Atividades Concluídas</div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        
                        <!-- Card 4: Conversão e Retenção -->
                        <div class="dashboard-card">
                            <div class="card-header">
                                <h3 class="card-title">
                                    <i class="fas fa-percentage text-danger"></i>
                                    Conversão & Retenção
                                </h3>
                                <div class="card-actions">
                                    <button class="btn btn-sm btn-outline-danger" onclick="abrirDetalhes('conversao')">
                                        <i class="fas fa-expand"></i>
                                    </button>
                                </div>
                            </div>
                            <div class="card-content">
                                <div class="mini-chart">
                                    <canvas id="chartConversao"></canvas>
                                </div>
                                <div class="kpi-indicator">
                                    <div class="kpi-icon" style="background: rgba(231, 76, 60, 0.1); color: #e74c3c;">
                                        <i class="fas fa-chart-pie"></i>
                                    </div>
                                    <div class="kpi-content">
                                        <div class="kpi-value"><?= number_format($dados_conversao['media_taxa'] ?? 0, 1, ',', '.') ?>%</div>
                                        <div class="kpi-label">Taxa de Conversão Média</div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        
                        <!-- Card 5: Ticket Médio -->
                        <div class="dashboard-card">
                            <div class="card-header">
                                <h3 class="card-title">
                                    <i class="fas fa-ticket-alt text-info"></i>
                                    Ticket Médio
                                </h3>
                                <div class="card-actions">
                                    <button class="btn btn-sm btn-outline-info" onclick="abrirDetalhes('ticket')">
                                        <i class="fas fa-expand"></i>
                                    </button>
                                </div>
                            </div>
                            <div class="card-content">
                                <div class="mini-chart">
                                    <canvas id="chartTicket"></canvas>
                                </div>
                                <div class="kpi-indicator">
                                    <div class="kpi-icon" style="background: rgba(26, 188, 156, 0.1); color: #1abc9c;">
                                        <i class="fas fa-money-bill-wave"></i>
                                    </div>
                                    <div class="kpi-content">
                                        <div class="kpi-value">R$ <?= number_format($dados_ticket['ticket_medio_geral'] ?? 0, 2, ',', '.') ?></div>
                                        <div class="kpi-label">Ticket Médio</div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        
                        <!-- Card 6: Clientes Perdidos -->
                        <div class="dashboard-card">
                            <div class="card-header">
                                <h3 class="card-title">
                                    <i class="fas fa-user-slash text-secondary"></i>
                                    Clientes Perdidos
                                </h3>
                                <div class="card-actions">
                                    <button class="btn btn-sm btn-outline-secondary" onclick="abrirDetalhes('perdidos')">
                                        <i class="fas fa-expand"></i>
                                    </button>
                                </div>
                            </div>
                            <div class="card-content">
                                <div class="mini-chart">
                                    <canvas id="chartPerdidos"></canvas>
                                </div>
                                <div class="kpi-indicator">
                                    <div class="kpi-icon" style="background: rgba(149, 165, 166, 0.1); color: #95a5a6;">
                                        <i class="fas fa-exclamation-triangle"></i>
                                    </div>
                                    <div class="kpi-content">
                                        <div class="kpi-value"><?= number_format($dados_clientes_perdidos['total_perdidos'] ?? 0, 0, '', '.') ?></div>
                                        <div class="kpi-label">Clientes Perdidos</div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    
                    <!-- GRÁFICO PRINCIPAL (selecionado) -->
                    <div class="chart-container">
                        <div class="chart-header">
                            <div class="chart-title"><?= $titulo_grafico ?></div>
                            <div class="chart-actions">
                                <div class="chart-type-selector">
                                    <button type="button" class="chart-type-btn <?= $filtros['tipo_visualizacao'] == 'bar' ? 'active' : '' ?>" onclick="mudarTipoGrafico('bar')">
                                        <i class="fas fa-chart-bar"></i> Barras
                                    </button>
                                    <button type="button" class="chart-type-btn <?= $filtros['tipo_visualizacao'] == 'line' ? 'active' : '' ?>" onclick="mudarTipoGrafico('line')">
                                        <i class="fas fa-chart-line"></i> Linhas
                                    </button>
                                    <button type="button" class="chart-type-btn <?= $filtros['tipo_visualizacao'] == 'pie' ? 'active' : '' ?>" onclick="mudarTipoGrafico('pie')">
                                        <i class="fas fa-chart-pie"></i> Pizza
                                    </button>
                                    <button type="button" class="chart-type-btn <?= $filtros['tipo_visualizacao'] == 'doughnut' ? 'active' : '' ?>" onclick="mudarTipoGrafico('doughnut')">
                                        <i class="fas fa-circle"></i> Rosca
                                    </button>
                                </div>
                                <button class="btn btn-primary btn-sm" onclick="exportarCSV()">
                                    <i class="fas fa-file-excel"></i> CSV
                                </button>
                                <button class="btn btn-primary btn-sm" onclick="imprimirGrafico()">
                                    <i class="fas fa-print"></i> Imprimir
                                </button>
                                <button class="btn btn-primary btn-sm" onclick="toggleTabela()">
                                    <i class="fas fa-table"></i> Tabela
                                </button>
                            </div>
                        </div>
                        
                        <div class="chart-wrapper">
                            <canvas id="graficoPrincipal"></canvas>
                        </div>
                        
                        <div id="tabelaDados" style="display: none;">
                            <div class="data-table-container">
                                <table class="data-table">
                                    <thead>
                                        <tr>
                                            <?php if (!empty($dados_grafico)): ?>
                                                <?php foreach (array_keys($dados_grafico[0]) as $coluna): ?>
                                                    <th><?= ucfirst(str_replace('_', ' ', $coluna)) ?></th>
                                                <?php endforeach; ?>
                                            <?php endif; ?>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        <?php foreach ($dados_grafico as $linha): ?>
                                            <tr>
                                                <?php foreach ($linha as $coluna => $valor): ?>
                                                    <td>
                                                        <?php 
                                                        if (is_numeric($valor)) {
                                                            if (stripos($coluna, 'valor') !== false || stripos($coluna, 'total') !== false || stripos($coluna, 'ticket') !== false) {
                                                                echo 'R$ ' . number_format($valor, 2, ',', '.');
                                                            } elseif (stripos($coluna, 'percentual') !== false || stripos($coluna, 'taxa') !== false || stripos($coluna, 'conversao') !== false) {
                                                                echo number_format($valor, 2, ',', '.') . '%';
                                                            } else {
                                                                echo number_format($valor, 0, '', '.');
                                                            }
                                                        } else {
                                                            echo htmlspecialchars($valor);
                                                        }
                                                        ?>
                                                    </td>
                                                <?php endforeach; ?>
                                            </tr>
                                        <?php endforeach; ?>
                                    </tbody>
                                </table>
                            </div>
                        </div>
                    </div>
                    
                <?php else: ?>
                    <!-- VISUALIZAÇÃO INDIVIDUAL DE GRÁFICO -->
                    <?php 
                    $total_valor = 0;
                    $total_quantidade = 0;
                    $total_clientes = 0;
                    
                    if (isset($dados['total_valor'])) $total_valor = $dados['total_valor'];
                    if (isset($dados['total_quantidade'])) $total_quantidade = $dados['total_quantidade'];
                    if (isset($dados['total_clientes'])) $total_clientes = $dados['total_clientes'];
                    if (isset($dados['total_geral'])) $total_quantidade = $dados['total_geral'];
                    if (isset($dados['total_perdidos'])) $total_clientes = $dados['total_perdidos'];
                    if (isset($dados['total_atividades'])) $total_quantidade = $dados['total_atividades'];
                    if (isset($dados['total_fluxos'])) $total_clientes = $dados['total_fluxos'];
                    if (isset($dados['total_novos'])) $total_clientes = $dados['total_novos'];
                    ?>
                    
                    <div class="stats-grid">
                        <div class="stat-card">
                            <div class="stat-icon primary">
                                <i class="fas fa-chart-bar"></i>
                            </div>
                            <div class="stat-value"><?= count($dados_grafico) ?></div>
                            <div class="stat-label">Itens Analisados</div>
                        </div>
                        
                        <div class="stat-card">
                            <div class="stat-icon success">
                                <i class="fas fa-dollar-sign"></i>
                            </div>
                            <div class="stat-value">R$ <?= number_format($total_valor, 2, ',', '.') ?></div>
                            <div class="stat-label">Valor Total</div>
                        </div>
                        
                        <div class="stat-card">
                            <div class="stat-icon warning">
                                <i class="fas fa-box"></i>
                            </div>
                            <div class="stat-value"><?= number_format($total_quantidade, 0, '', '.') ?></div>
                            <div class="stat-label">Quantidade</div>
                        </div>
                        
                        <div class="stat-card">
                            <div class="stat-icon danger">
                                <i class="fas fa-users"></i>
                            </div>
                            <div class="stat-value"><?= number_format($total_clientes, 0, '', '.') ?></div>
                            <div class="stat-label">Clientes/Unidades</div>
                        </div>
                    </div>

                    <div class="chart-container">
                        <div class="chart-header">
                            <div class="chart-title"><?= $titulo_grafico ?></div>
                            <div class="chart-actions">
                                <div class="chart-type-selector">
                                    <button type="button" class="chart-type-btn <?= $filtros['tipo_visualizacao'] == 'bar' ? 'active' : '' ?>" onclick="mudarTipoGrafico('bar')">
                                        <i class="fas fa-chart-bar"></i> Barras
                                    </button>
                                    <button type="button" class="chart-type-btn <?= $filtros['tipo_visualizacao'] == 'line' ? 'active' : '' ?>" onclick="mudarTipoGrafico('line')">
                                        <i class="fas fa-chart-line"></i> Linhas
                                    </button>
                                    <button type="button" class="chart-type-btn <?= $filtros['tipo_visualizacao'] == 'pie' ? 'active' : '' ?>" onclick="mudarTipoGrafico('pie')">
                                        <i class="fas fa-chart-pie"></i> Pizza
                                    </button>
                                    <button type="button" class="chart-type-btn <?= $filtros['tipo_visualizacao'] == 'doughnut' ? 'active' : '' ?>" onclick="mudarTipoGrafico('doughnut')">
                                        <i class="fas fa-circle"></i> Rosca
                                    </button>
                                    <button type="button" class="chart-type-btn <?= $filtros['tipo_visualizacao'] == 'radar' ? 'active' : '' ?>" onclick="mudarTipoGrafico('radar')">
                                        <i class="fas fa-star"></i> Radar
                                    </button>
                                </div>
                                <button class="btn btn-primary btn-sm" onclick="exportarCSV()">
                                    <i class="fas fa-file-excel"></i> CSV
                                </button>
                                <button class="btn btn-primary btn-sm" onclick="imprimirGrafico()">
                                    <i class="fas fa-print"></i> Imprimir
                                </button>
                                <button class="btn btn-primary btn-sm" onclick="toggleTabela()">
                                    <i class="fas fa-table"></i> Tabela
                                </button>
                            </div>
                        </div>
                        
                        <div class="chart-wrapper">
                            <canvas id="graficoPrincipal"></canvas>
                        </div>
                        
                        <div id="tabelaDados" style="display: none;">
                            <div class="data-table-container">
                                <table class="data-table">
                                    <thead>
                                        <tr>
                                            <?php if (!empty($dados_grafico)): ?>
                                                <?php foreach (array_keys($dados_grafico[0]) as $coluna): ?>
                                                    <th><?= ucfirst(str_replace('_', ' ', $coluna)) ?></th>
                                                <?php endforeach; ?>
                                            <?php endif; ?>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        <?php foreach ($dados_grafico as $linha): ?>
                                            <tr>
                                                <?php foreach ($linha as $coluna => $valor): ?>
                                                    <td>
                                                        <?php 
                                                        if (is_numeric($valor)) {
                                                            if (stripos($coluna, 'valor') !== false || stripos($coluna, 'total') !== false || stripos($coluna, 'ticket') !== false) {
                                                                echo 'R$ ' . number_format($valor, 2, ',', '.');
                                                            } elseif (stripos($coluna, 'percentual') !== false || stripos($coluna, 'taxa') !== false || stripos($coluna, 'conversao') !== false) {
                                                                echo number_format($valor, 2, ',', '.') . '%';
                                                            } else {
                                                                echo number_format($valor, 0, '', '.');
                                                            }
                                                        } else {
                                                            echo htmlspecialchars($valor);
                                                        }
                                                        ?>
                                                    </td>
                                                <?php endforeach; ?>
                                            </tr>
                                        <?php endforeach; ?>
                                    </tbody>
                                </table>
                            </div>
                        </div>
                    </div>
                <?php endif; ?>
            <?php endif; ?>
        </div>
    </div>

    <!-- Botão Fixo para Administração -->
    <?php if (in_array($permissao, ['super_admin'])): ?>
        <div class="admin-fixed-btn" onclick="window.location.href='gerenciar_sistema.php'">
            <i class="fas fa-cog"></i>
            <span class="tooltip">Administração</span>
        </div>
    <?php endif; ?>

    <div class="version-info">Tvitecnologia SON v2.0 - Dashboard Analítico Executivo</div>

    <script>
        // ========== CONFIGURAÇÃO DOS GRÁFICOS ========== //
        
        // Cores para os datasets
        const backgroundColors = [
            'rgba(54, 162, 235, 0.7)',
            'rgba(255, 99, 132, 0.7)',
            'rgba(75, 192, 192, 0.7)',
            'rgba(255, 159, 64, 0.7)',
            'rgba(153, 102, 255, 0.7)',
            'rgba(255, 205, 86, 0.7)',
            'rgba(201, 203, 207, 0.7)',
            'rgba(230, 126, 34, 0.7)',
            'rgba(155, 89, 182, 0.7)',
            'rgba(52, 152, 219, 0.7)',
            'rgba(46, 204, 113, 0.7)',
            'rgba(241, 196, 15, 0.7)'
        ];
        
        const borderColors = [
            'rgba(54, 162, 235, 1)',
            'rgba(255, 99, 132, 1)',
            'rgba(75, 192, 192, 1)',
            'rgba(255, 159, 64, 1)',
            'rgba(153, 102, 255, 1)',
            'rgba(255, 205, 86, 1)',
            'rgba(201, 203, 207, 1)',
            'rgba(230, 126, 34, 1)',
            'rgba(155, 89, 182, 1)',
            'rgba(52, 152, 219, 1)',
            'rgba(46, 204, 113, 1)',
            'rgba(241, 196, 15, 1)'
        ];

        // Dados do gráfico principal
        const chartLabels = <?= json_encode($chart_labels) ?>;
        const chartDatasets = <?= json_encode($chart_datasets) ?>;
        const chartType = '<?= $filtros['tipo_visualizacao'] ?>';
        const metaValor = <?= (float)$filtros['meta'] ?>;
        const tituloGrafico = '<?= $titulo_grafico ?>';
        const tipoGraficoAtual = '<?= $filtros['tipo_grafico'] ?>';
        const tipoVisualizacaoMultiplo = <?= $tipo_visualizacao_multiplo ? 'true' : 'false' ?>;
        
        // Preparar datasets para o Chart.js
        function prepararDatasets(chartDatasets, chartType) {
            const datasets = [];
            
            let i = 0;
            for (const [label, data] of Object.entries(chartDatasets)) {
                datasets.push({
                    label,
                    data,
                    backgroundColor: chartType === 'pie' || chartType === 'doughnut' || chartType === 'polarArea' 
                        ? backgroundColors.slice(0, data.length) 
                        : backgroundColors[i % backgroundColors.length],
                    borderColor: borderColors[i % borderColors.length],
                    borderWidth: 1,
                    fill: chartType === 'line' || chartType === 'radar'
                });
                i++;
            }
            
            return datasets;
        }
        
        // Configurações do gráfico principal
        const configPrincipal = {
            type: chartType,
            data: {
                labels: chartLabels,
                datasets: prepararDatasets(chartDatasets, chartType)
            },
            options: {
                responsive: true,
                maintainAspectRatio: false,
                plugins: {
                    legend: {
                        position: 'top',
                    },
                    title: {
                        display: true,
                        text: tituloGrafico,
                        font: {
                            size: 16
                        }
                    },
                    tooltip: {
                        callbacks: {
                            label: function(context) {
                                let label = context.dataset.label || '';
                                if (label) {
                                    label += ': ';
                                }
                                if (context.parsed.y !== undefined) {
                                    if (label.includes('Valor') || label.includes('R$') || label.includes('Ticket')) {
                                        label += 'R$ ' + context.parsed.y.toFixed(2).replace('.', ',');
                                    } else if (label.includes('%') || label.includes('Percentual') || label.includes('Taxa')) {
                                        label += context.parsed.y.toFixed(2) + '%';
                                    } else {
                                        label += context.parsed.y;
                                    }
                                }
                                return label;
                            }
                        }
                    }
                },
                scales: tipoGraficoAtual !== 'radar' ? {
                    y: {
                        beginAtZero: true,
                        ticks: {
                            callback: function(value) {
                                if (tipoGraficoAtual.includes('ticket') || tipoGraficoAtual.includes('valor')) {
                                    return 'R$ ' + value.toLocaleString('pt-BR');
                                } else if (tipoGraficoAtual.includes('percentual') || tipoGraficoAtual.includes('taxa')) {
                                    return value + '%';
                                }
                                return value;
                            }
                        }
                    }
                } : {}
            }
        };
        
        // Adicionar linha de meta se for um gráfico de barras ou linhas e meta > 0
        if ((chartType === 'bar' || chartType === 'line') && metaValor > 0) {
            configPrincipal.options.plugins.annotation = {
                annotations: {
                    line1: {
                        type: 'line',
                        yMin: metaValor,
                        yMax: metaValor,
                        borderColor: 'rgb(255, 99, 132)',
                        borderWidth: 2,
                        borderDash: [5, 5],
                        label: {
                            display: true,
                            content: 'Meta: R$ ' + metaValor.toFixed(2).replace('.', ','),
                            position: 'end'
                        }
                    }
                }
            };
        }
        
        // Criar gráfico principal
        const ctxPrincipal = document.getElementById('graficoPrincipal')?.getContext('2d');
        let myChart = null;
        if (ctxPrincipal) {
            myChart = new Chart(ctxPrincipal, configPrincipal);
        }
        
        // ========== MINI-GRÁFICOS DO DASHBOARD COMPLETO ========== //
        <?php if ($filtros['tipo_grafico'] == 'dashboard_completo' && isset($dados_funil)): ?>
        
        // 1. Gráfico do Funil
        const ctxFunil = document.getElementById('chartFunil')?.getContext('2d');
        if (ctxFunil) {
            new Chart(ctxFunil, {
                type: 'doughnut',
                data: {
                    labels: <?= json_encode($dados_funil['labels'] ?? []) ?>,
                    datasets: [{
                        data: <?= json_encode($dados_funil['clientes'] ?? []) ?>,
                        backgroundColor: backgroundColors.slice(0, <?= count($dados_funil['labels'] ?? []) ?>),
                        borderWidth: 1
                    }]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    plugins: {
                        legend: { display: false },
                        title: { display: false }
                    }
                }
            });
        }
        
        // 2. Gráfico de Vendas
        const ctxVendas = document.getElementById('chartVendas')?.getContext('2d');
        if (ctxVendas) {
            const topProdutos = <?= json_encode(array_slice($dados_vendas['labels'] ?? [], 0, 5)) ?>;
            const topValores = <?= json_encode(array_slice($dados_vendas['valores'] ?? [], 0, 5)) ?>;
            
            new Chart(ctxVendas, {
                type: 'bar',
                data: {
                    labels: topProdutos,
                    datasets: [{
                        label: 'Valor (R$)',
                        data: topValores,
                        backgroundColor: 'rgba(46, 204, 113, 0.7)',
                        borderColor: 'rgba(46, 204, 113, 1)',
                        borderWidth: 1
                    }]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    plugins: {
                        legend: { display: false },
                        title: { display: false }
                    },
                    scales: {
                        y: {
                            beginAtZero: true,
                            ticks: {
                                callback: function(value) {
                                    return 'R$ ' + value.toLocaleString('pt-BR');
                                }
                            }
                        }
                    }
                }
            });
        }
        
        // 3. Gráfico de Atividades
        const ctxAtividades = document.getElementById('chartAtividades')?.getContext('2d');
        if (ctxAtividades) {
            const usuariosAtividades = <?= json_encode(array_slice($dados_atividades['labels'] ?? [], 0, 5)) ?>;
            const concluidasAtividades = <?= json_encode(array_slice($dados_atividades['concluidas'] ?? [], 0, 5)) ?>;
            
            new Chart(ctxAtividades, {
                type: 'horizontalBar',
                data: {
                    labels: usuariosAtividades,
                    datasets: [{
                        label: 'Concluídas',
                        data: concluidasAtividades,
                        backgroundColor: 'rgba(243, 156, 18, 0.7)',
                        borderColor: 'rgba(243, 156, 18, 1)',
                        borderWidth: 1
                    }]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    plugins: {
                        legend: { display: false },
                        title: { display: false }
                    },
                    scales: {
                        x: { beginAtZero: true }
                    }
                }
            });
        }
        
        // 4. Gráfico de Conversão
        const ctxConversao = document.getElementById('chartConversao')?.getContext('2d');
        if (ctxConversao) {
            const origensConversao = <?= json_encode(array_slice($dados_conversao['labels'] ?? [], 0, 5)) ?>;
            const taxasConversao = <?= json_encode(array_slice($dados_conversao['taxas'] ?? [], 0, 5)) ?>;
            
            new Chart(ctxConversao, {
                type: 'line',
                data: {
                    labels: origensConversao,
                    datasets: [{
                        label: 'Taxa (%)',
                        data: taxasConversao,
                        backgroundColor: 'rgba(231, 76, 60, 0.1)',
                        borderColor: 'rgba(231, 76, 60, 1)',
                        borderWidth: 2,
                        fill: true,
                        tension: 0.4
                    }]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    plugins: {
                        legend: { display: false },
                        title: { display: false }
                    },
                    scales: {
                        y: {
                            beginAtZero: true,
                            ticks: {
                                callback: function(value) {
                                    return value + '%';
                                }
                            }
                        }
                    }
                }
            });
        }
        
        // 5. Gráfico de Ticket Médio
        const ctxTicket = document.getElementById('chartTicket')?.getContext('2d');
        if (ctxTicket) {
            const datasTicket = <?= json_encode(array_slice($dados_ticket['labels'] ?? [], -7)) ?>;
            const valoresTicket = <?= json_encode(array_slice($dados_ticket['tickets'] ?? [], -7)) ?>;
            
            new Chart(ctxTicket, {
                type: 'line',
                data: {
                    labels: datasTicket,
                    datasets: [{
                        label: 'Ticket Médio (R$)',
                        data: valoresTicket,
                        backgroundColor: 'rgba(26, 188, 156, 0.1)',
                        borderColor: 'rgba(26, 188, 156, 1)',
                        borderWidth: 2,
                        fill: true,
                        tension: 0.4
                    }]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    plugins: {
                        legend: { display: false },
                        title: { display: false }
                    },
                    scales: {
                        y: {
                            beginAtZero: true,
                            ticks: {
                                callback: function(value) {
                                    return 'R$ ' + value.toFixed(2);
                                }
                            }
                        }
                    }
                }
            });
        }
        
        // 6. Gráfico de Clientes Perdidos
        const ctxPerdidos = document.getElementById('chartPerdidos')?.getContext('2d');
        if (ctxPerdidos) {
            const motivosPerdidos = <?= json_encode(array_slice($dados_clientes_perdidos['labels'] ?? [], 0, 5)) ?>;
            const quantidadesPerdidos = <?= json_encode(array_slice($dados_clientes_perdidos['perdidos'] ?? [], 0, 5)) ?>;
            
            new Chart(ctxPerdidos, {
                type: 'polarArea',
                data: {
                    labels: motivosPerdidos,
                    datasets: [{
                        data: quantidadesPerdidos,
                        backgroundColor: [
                            'rgba(255, 99, 132, 0.7)',
                            'rgba(54, 162, 235, 0.7)',
                            'rgba(255, 206, 86, 0.7)',
                            'rgba(75, 192, 192, 0.7)',
                            'rgba(153, 102, 255, 0.7)'
                        ],
                        borderWidth: 1
                    }]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    plugins: {
                        legend: { display: false },
                        title: { display: false }
                    }
                }
            });
        }
        
        <?php endif; ?>
        
        // ========== FUNÇÕES DE UTILIDADE ========== //
        
        function toggleSidebar() {
            const sidebar = document.getElementById('sidebar');
            const contentWrapper = document.getElementById('contentWrapper');
            
            sidebar.classList.toggle('collapsed');
            contentWrapper.classList.toggle('expanded');
        }
        
        function atualizarFiltros() {
            const tipoGrafico = document.getElementById('tipo_grafico').value;
            
            // Esconder todos os filtros condicionais primeiro
            document.getElementById('filtro-ano').style.display = 'none';
            document.getElementById('filtro-atividades').style.display = 'none';
            document.getElementById('filtro-cliente').style.display = 'block';
            document.getElementById('filtro-produto').style.display = 'block';
            document.getElementById('filtro-origem').style.display = 'block';
            document.getElementById('filtro-eixo').style.display = 'block';
            
            // Mostrar filtros relevantes baseado no tipo de gráfico
            if (tipoGrafico === 'faturamento_mensal' || tipoGrafico === 'crescimento_clientes') {
                document.getElementById('filtro-ano').style.display = 'block';
                document.getElementById('filtro-cliente').style.display = 'none';
                document.getElementById('filtro-produto').style.display = 'none';
                document.getElementById('filtro-origem').style.display = 'none';
            }
            
            if (tipoGrafico === 'atividades_conclusao' || tipoGrafico === 'atividades_detalhadas') {
                document.getElementById('filtro-atividades').style.display = 'block';
                document.getElementById('filtro-cliente').style.display = 'none';
                document.getElementById('filtro-produto').style.display = 'none';
            }
            
            if (tipoGrafico === 'produtividade_usuario' || tipoGrafico === 'fluxos_automatizados') {
                document.getElementById('filtro-cliente').style.display = 'none';
                document.getElementById('filtro-produto').style.display = 'none';
                document.getElementById('filtro-origem').style.display = 'none';
            }
            
            if (tipoGrafico === 'clientes_perdidos' || tipoGrafico === 'satisfacao_cliente') {
                document.getElementById('filtro-cliente').style.display = 'none';
                document.getElementById('filtro-produto').style.display = 'none';
            }
            
            // Ajustar opções do eixo Y
            const eixoYSelect = document.getElementById('eixo_y');
            if (tipoGrafico.includes('conversao') || tipoGrafico.includes('taxa') || tipoGrafico.includes('percentual')) {
                eixoYSelect.innerHTML = `
                    <option value="percentual">Percentual</option>
                    <option value="clientes">Total Clientes</option>
                `;
            } else if (tipoGrafico.includes('ticket')) {
                eixoYSelect.innerHTML = `
                    <option value="valor_total">Ticket Médio (R$)</option>
                    <option value="clientes">Clientes</option>
                `;
            } else {
                eixoYSelect.innerHTML = `
                    <option value="valor_total">Valor Total</option>
                    <option value="quantidade">Quantidade</option>
                    <option value="clientes">Total Clientes</option>
                    <option value="percentual">Percentual</option>
                `;
            }
        }
        
        function limparFiltros() {
            window.location.href = window.location.pathname + '?tipo_grafico=dashboard_completo';
        }
        
        function mudarTipoGrafico(tipo) {
            const url = new URL(window.location.href);
            url.searchParams.set('tipo_visualizacao', tipo);
            window.location.href = url.toString();
        }
        
        function abrirDetalhes(tipo) {
            let url = window.location.href;
            
            switch(tipo) {
                case 'funil':
                    url = url.replace(/tipo_grafico=[^&]*/, 'tipo_grafico=performance_funil');
                    break;
                case 'vendas':
                    url = url.replace(/tipo_grafico=[^&]*/, 'tipo_grafico=produtos_vendidos');
                    break;
                case 'atividades':
                    url = url.replace(/tipo_grafico=[^&]*/, 'tipo_grafico=atividades_detalhadas');
                    break;
                case 'conversao':
                    url = url.replace(/tipo_grafico=[^&]*/, 'tipo_grafico=conversao_origem');
                    break;
                case 'ticket':
                    url = url.replace(/tipo_grafico=[^&]*/, 'tipo_grafico=ticket_medio');
                    break;
                case 'perdidos':
                    url = url.replace(/tipo_grafico=[^&]*/, 'tipo_grafico=clientes_perdidos');
                    break;
            }
            
            window.location.href = url;
        }
        
        function salvarConfiguracao() {
            Swal.fire({
                title: 'Salvar Configuração',
                text: 'Deseja salvar esta configuração de dashboard?',
                icon: 'question',
                showCancelButton: true,
                confirmButtonText: 'Salvar',
                cancelButtonText: 'Cancelar'
            }).then((result) => {
                if (result.isConfirmed) {
                    const formData = new FormData(document.getElementById('filtrosForm'));
                    
                    fetch('salvar_config_dashboard.php', {
                        method: 'POST',
                        body: formData
                    })
                    .then(response => response.json())
                    .then(data => {
                        if (data.success) {
                            Swal.fire('Sucesso!', 'Configuração salva com sucesso.', 'success');
                        } else {
                            Swal.fire('Erro!', data.message || 'Erro ao salvar configuração.', 'error');
                        }
                    })
                    .catch(error => {
                        Swal.fire('Erro!', 'Erro ao salvar configuração.', 'error');
                    });
                }
            });
        }
        
        function atualizarDashboard() {
            window.location.reload();
        }
        
        function exportarDashboard() {
            Swal.fire({
                title: 'Exportar Dashboard',
                text: 'Selecione o formato de exportação:',
                icon: 'question',
                showCancelButton: true,
                showDenyButton: true,
                confirmButtonText: 'PDF',
                denyButtonText: 'CSV',
                cancelButtonText: 'Cancelar'
            }).then((result) => {
                if (result.isConfirmed) {
                    exportarPDF();
                } else if (result.isDenied) {
                    exportarCSV();
                }
            });
        }
        
        // Inicializar a visibilidade dos filtros
        document.addEventListener('DOMContentLoaded', function() {
            atualizarFiltros();
            
            // Adicionar evento para atualizar gráfico ao redimensionar
            window.addEventListener('resize', function() {
                if (myChart) {
                    myChart.resize();
                }
            });
        });

        // Funções de exportação
        function exportarCSV() {
            let csv = tituloGrafico + '\n\n';
            
            // Cabeçalho
            const headers = [];
            document.querySelectorAll('thead th').forEach(th => {
                headers.push(th.textContent);
            });
            csv += headers.join(';') + '\n';
            
            // Dados
            document.querySelectorAll('tbody tr').forEach(tr => {
                const row = [];
                tr.querySelectorAll('td').forEach(td => {
                    row.push(td.textContent);
                });
                csv += row.join(';') + '\n';
            });
            
            // Criar link de download
            const blob = new Blob([csv], {type: 'text/csv;charset=utf-8;'});
            const link = document.createElement('a');
            const url = URL.createObjectURL(blob);
            link.setAttribute('href', url);
            link.setAttribute('download', 'dashboard_<?= $filtros['tipo_grafico'] ?>_<?= date('Ymd_His') ?>.csv');
            link.style.visibility = 'hidden';
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
        }
        
        function exportarPDF() {
            window.print();
        }
        
        function imprimirGrafico() {
            const canvas = document.getElementById('graficoPrincipal');
            if (!canvas) return;
            
            const win = window.open('', 'Print Chart');
            win.document.write('<html><head><title>' + tituloGrafico + '</title>');
            win.document.write('<style>body{text-align:center;font-family:Arial,sans-serif;padding:20px;}</style>');
            win.document.write('</head><body>');
            win.document.write('<h1>' + tituloGrafico + '</h1>');
            win.document.write('<img src="' + canvas.toDataURL() + '" style="max-width:100%;"/>');
            win.document.write('</body></html>');
            win.document.close();
            win.focus();
            setTimeout(() => { win.print(); win.close(); }, 500);
        }
        
        function toggleTabela() {
            const tabela = document.getElementById('tabelaDados');
            const chartWrapper = document.querySelector('.chart-wrapper');
            const btn = event.currentTarget;
            
            if (tabela.style.display === 'none') {
                tabela.style.display = 'block';
                chartWrapper.style.height = '300px';
                btn.innerHTML = '<i class="fas fa-chart-bar"></i> Gráfico';
            } else {
                tabela.style.display = 'none';
                chartWrapper.style.height = '450px';
                btn.innerHTML = '<i class="fas fa-table"></i> Tabela';
            }
            
            if (myChart) {
                myChart.resize();
            }
        }
    </script>
</body>
</html>