<?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();
        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;
}

// ----------------------------
// FUNÇÕES PRINCIPAIS
// ----------------------------

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

// Carregar dados para filtros
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 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 = ? 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 ?: [];
}

// Funções para carregar dados dos gráficos
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 .= "i";
    }
    
    $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'];
    }
    
    return [
        'labels' => $labels,
        'quantidades' => $quantidades,
        'valores' => $valores,
        'total_quantidade' => array_sum($quantidades),
        'total_valor' => array_sum($valores),
        '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
            LEFT JOIN clientes c ON a.cliente_id = c.id
            WHERE u.ativo = 'sim'
              AND u.tenant_id = ?
              AND a.data_agendada 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 ($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";
    }

    if ($Origem) {
        $sql .= " AND c.Origem = ?";
        $params[] = $Origem;
        $types .= "i";
    }

    $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'];
    }

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

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 .= "i";
    }
    
    $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'];
    }
    
    return [
        'labels' => $labels,
        'valores' => $valores,
        'clientes' => $clientes,
        'total_valor' => array_sum($valores),
        'total_clientes' => array_sum($clientes),
        'dados_completos' => $dados
    ];
}

function carregarDadosVendasPorVendedor($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $data_inicio = null, $data_fim = null, $Origem = null) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    $sql = "SELECT 
                u.nome AS vendedor,
                COUNT(DISTINCT cp.cliente_id) as total_clientes,
                SUM(cp.valor * cp.quantidade) as valor_total
            FROM cliente_produtos cp
            JOIN usuarios u ON cp.usuario_id = u.id
            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 ($Origem) {
        $sql .= " AND c.Origem = ?";
        $params[] = $Origem;
        $types .= "i";
    }
    
    $sql .= " GROUP BY u.nome
              ORDER BY valor_total DESC";
    
    $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 = [];
    $valores = [];
    
    foreach ($dados as $item) {
        $labels[] = $item['vendedor'];
        $clientes[] = (int)$item['total_clientes'];
        $valores[] = (float)$item['valor_total'];
    }
    
    return [
        'labels' => $labels,
        'clientes' => $clientes,
        'valores' => $valores,
        'total_valor' => array_sum($valores),
        'dados_completos' => $dados
    ];
}

function carregarDadosFaturamentoMensal($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $ano = null, $Origem = null) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    $ano = $ano ?: date('Y');
    
    $sql = "SELECT 
                MONTH(cp.data_cadastro) as mes,
                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 YEAR(cp.data_cadastro) = ?";
    
    $params = [$tenant_id, $ano];
    $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 ($Origem) {
        $sql .= " AND c.Origem = ?";
        $params[] = $Origem;
        $types .= "i";
    }
    
    $sql .= " GROUP BY MONTH(cp.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 => 'Janeiro', 2 => 'Fevereiro', 3 => 'Março', 4 => 'Abril',
        5 => 'Maio', 6 => 'Junho', 7 => 'Julho', 8 => 'Agosto',
        9 => 'Setembro', 10 => 'Outubro', 11 => 'Novembro', 12 => 'Dezembro'
    ];
    
    $labels = [];
    $valores = array_fill(0, 12, 0);
    
    foreach ($dados as $item) {
        $mes = (int)$item['mes'];
        $valores[$mes-1] = (float)$item['valor_total'];
    }
    
    foreach ($meses as $num => $nome) {
        $labels[] = $nome;
    }
    
    return [
        'labels' => $labels,
        'valores' => $valores,
        'total_valor' => array_sum($valores),
        'dados_completos' => $dados
    ];
}

function getRegiaoByEstado($estado) {
    $regioes = [
        'Norte' => ['AC', 'AP', 'AM', 'PA', 'RO', 'RR', 'TO'],
        'Nordeste' => ['AL', 'BA', 'CE', 'MA', 'PB', 'PE', 'PI', 'RN', 'SE'],
        'Centro-Oeste' => ['DF', 'GO', 'MT', 'MS'],
        'Sudeste' => ['ES', 'MG', 'RJ', 'SP'],
        'Sul' => ['PR', 'RS', 'SC']
    ];
    
    foreach ($regioes as $regiao => $estados) {
        if (in_array($estado, $estados)) {
            return $regiao;
        }
    }
    return 'Outros';
}

function carregarDadosVendasPorRegiao($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $data_inicio = null, $data_fim = null, $Origem = null) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    $sql = "SELECT 
                c.estado,
                COUNT(DISTINCT cp.cliente_id) as total_clientes,
                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 c.estado IS NOT NULL
              AND c.estado != ''";
    
    $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 ($Origem) {
        $sql .= " AND c.Origem = ?";
        $params[] = $Origem;
        $types .= "i";
    }
    
    $sql .= " GROUP BY c.estado";
    
    $stmt = $conn->prepare($sql);
    if (!$stmt) die("Erro: " . $conn->error);
    
    if ($params) {
        $stmt->bind_param($types, ...$params);
    }
    
    $stmt->execute();
    $res = $stmt->get_result();
    $dados_estados = $res->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    
    $regioes = [];
    foreach ($dados_estados as $item) {
        $regiao = getRegiaoByEstado($item['estado']);
        
        if (!isset($regioes[$regiao])) {
            $regioes[$regiao] = [
                'total_clientes' => 0,
                'valor_total' => 0
            ];
        }
        
        $regioes[$regiao]['total_clientes'] += (int)$item['total_clientes'];
        $regioes[$regiao]['valor_total'] += (float)$item['valor_total'];
    }
    
    uasort($regioes, function($a, $b) {
        return $b['valor_total'] <=> $a['valor_total'];
    });
    
    $labels = [];
    $clientes = [];
    $valores = [];
    
    foreach ($regioes as $regiao => $dados) {
        $labels[] = $regiao;
        $clientes[] = $dados['total_clientes'];
        $valores[] = $dados['valor_total'];
    }
    
    return [
        'labels' => $labels,
        'clientes' => $clientes,
        'valores' => $valores,
        'total_valor' => array_sum($valores),
        'dados_completos' => $dados_estados
    ];
}

function carregarDadosVendasPorCategoria($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $data_inicio = null, $data_fim = null, $Origem = null) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    $sql = "SELECT 
                cp.categoria,
                COUNT(DISTINCT cp.cliente_id) as total_clientes,
                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.categoria IS NOT NULL
              AND cp.categoria != ''";
    
    $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 ($Origem) {
        $sql .= " AND c.Origem = ?";
        $params[] = $Origem;
        $types .= "i";
    }
    
    $sql .= " GROUP BY cp.categoria
              ORDER BY valor_total DESC";
    
    $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 = [];
    $quantidades = [];
    $valores = [];
    
    foreach ($dados as $item) {
        $labels[] = $item['categoria'];
        $clientes[] = (int)$item['total_clientes'];
        $quantidades[] = (float)$item['total_quantidade'];
        $valores[] = (float)$item['valor_total'];
    }
    
    return [
        'labels' => $labels,
        'clientes' => $clientes,
        'quantidades' => $quantidades,
        'valores' => $valores,
        'total_valor' => array_sum($valores),
        'dados_completos' => $dados
    ];
}

function carregarDadosVendasPorOrigem($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 
                o.nome as origem,
                COUNT(DISTINCT cp.cliente_id) as total_clientes,
                SUM(cp.valor * cp.quantidade) as valor_total
            FROM cliente_produtos cp
            JOIN clientes c ON cp.cliente_id = c.id
            JOIN origens o ON c.Origem = o.id
            WHERE cp.tenant_id = ?
              AND c.Origem 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(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 o.nome
              ORDER BY valor_total DESC";
    
    $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 = [];
    $valores = [];
    
    foreach ($dados as $item) {
        $labels[] = $item['origem'];
        $clientes[] = (int)$item['total_clientes'];
        $valores[] = (float)$item['valor_total'];
    }
    
    return [
        'labels' => $labels,
        'clientes' => $clientes,
        'valores' => $valores,
        'total_valor' => array_sum($valores),
        'dados_completos' => $dados
    ];
}

function carregarDadosVendasPorPais($conn, $tenant_id, $usuario_id, $is_admin, $is_super_admin, $data_inicio = null, $data_fim = null, $Origem = null) {
    $ver_todos = $is_admin || $is_super_admin || usuarioPodeVerTodosClientes($conn, $usuario_id);
    
    $sql = "SELECT 
                c.Pais,
                COUNT(DISTINCT cp.cliente_id) as total_clientes,
                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 c.Pais IS NOT NULL
              AND c.Pais != ''";
    
    $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 ($Origem) {
        $sql .= " AND c.Origem = ?";
        $params[] = $Origem;
        $types .= "i";
    }
    
    $sql .= " GROUP BY c.Pais
              ORDER BY valor_total DESC";
    
    $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 = [];
    $valores = [];
    
    foreach ($dados as $item) {
        $labels[] = $item['Pais'];
        $clientes[] = (int)$item['total_clientes'];
        $valores[] = (float)$item['valor_total'];
    }
    
    return [
        'labels' => $labels,
        'clientes' => $clientes,
        'valores' => $valores,
        'total_valor' => array_sum($valores),
        'dados_completos' => $dados
    ];
}

// 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'] ?? 'produtos_vendidos',
    '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 = 'Análise de Dados';
$chart_labels = [];
$chart_datasets = [];
$tem_dados = false;

switch ($filtros['tipo_grafico']) {
    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;
        
    case 'vendas_vendedor':
        $titulo_grafico = 'Vendas por Vendedor';
        $dados = carregarDadosVendasPorVendedor(
            $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
        );
        
        $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 = ['Total Clientes' => $dados['clientes']];
        }
        break;
        
    case 'faturamento_mensal':
        $titulo_grafico = 'Faturamento Mensal';
        $dados = carregarDadosFaturamentoMensal(
            $conn, 
            $tenant_id,
            $usuario_id,
            $is_admin,
            $is_super_admin,
            $filtros['ano'],
            !empty($filtros['Origem']) && $filtros['Origem'] > 0 ? $filtros['Origem'] : null
        );
        
        $dados_grafico = $dados['dados_completos'];
        $chart_labels = $dados['labels'];
        $tem_dados = !empty($dados['dados_completos']);
        
        $chart_datasets = ['Valor Total (R$)' => $dados['valores']];
        break;
        
    case 'vendas_regiao':
        $titulo_grafico = 'Vendas por Região';
        $dados = carregarDadosVendasPorRegiao(
            $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
        );
        
        $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 = ['Total Clientes' => $dados['clientes']];
        }
        break;
        
    case 'vendas_categoria':
        $titulo_grafico = 'Vendas por Categoria';
        $dados = carregarDadosVendasPorCategoria(
            $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
        );
        
        $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']];
        } elseif ($filtros['eixo_y'] == 'quantidade') {
            $chart_datasets = ['Quantidade' => $dados['quantidades']];
        } else {
            $chart_datasets = ['Total Clientes' => $dados['clientes']];
        }
        break;
        
    case 'vendas_origem':
        $titulo_grafico = 'Vendas por Origem';
        $dados = carregarDadosVendasPorOrigem(
            $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']);
        
        if ($filtros['eixo_y'] == 'valor_total') {
            $chart_datasets = ['Valor Total (R$)' => $dados['valores']];
        } else {
            $chart_datasets = ['Total Clientes' => $dados['clientes']];
        }
        break;
        
    case 'vendas_pais':
        $titulo_grafico = 'Vendas por País';
        $dados = carregarDadosVendasPorPais(
            $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
        );
        
        $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 = ['Total Clientes' => $dados['clientes']];
        }
        break;
        
    default:
        $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']);
        $chart_datasets = ['Valor Total (R$)' => $dados['valores']];
        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>';
    
    // Limpar a mensagem após exibir
    unset($_SESSION['mensagem']);
    
    // Remover a mensagem após 3 segundos
    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</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 anteriores mantidos... */
        :root {
            --primary-color: #3498db;
            --secondary-color: #2c3e50;
            --accent-color: #e74c3c;
            --success-color: #2ecc71;
            --warning-color: #f39c12;
            --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);
        }
        
        .sidebar .submenu {
            padding-left: 30px;
            background-color: rgba(0,0,0,0.2);
            display: none;
        }
        
        .sidebar .submenu a {
            padding: 12px 20px;
            font-size: 0.9em;
            border-left: none;
        }
        
        .sidebar .has-submenu {
            position: relative;
        }
        
        .sidebar .has-submenu::after {
            content: "▶";
            position: absolute;
            right: 20px;
            transition: transform 0.3s;
            font-size: 0.8em;
        }
        
        .sidebar .has-submenu.open::after {
            transform: rotate(90deg);
        }
        
        .content-wrapper {
            margin-left: 30px;
            margin-top: 20px;
            padding: 20px;
            transition: margin-left 0.3s ease;
        }
        
        .content-wrapper.expanded {
            margin-left: 70px;
        }
        
        .container {
            max-width: 1400px;
            margin: 0 auto;
            background: white;
            padding: 25px;
            border-radius: 10px;
            box-shadow: 0 5px 15px rgba(0,0,0,0.05);
        }
        
        .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 {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
            gap: 15px;
            margin-bottom: 15px;
        }
        
        .filtro-group {
            margin-bottom: 10px;
        }
        
        .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-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;
        }
        
        .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%;
        }
        
        .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;
        }
        
        .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;
        }
        
        .stats-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(250px, 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;
        }
        
        .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-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-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);
        }
        
        .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;
        }

        /* ========== ESTILOS PARA NOTIFICAÇÕES - CORRIGIDO ========== */
        .notification-container {
            position: fixed;
            top: 100px;
            right: 20px;
            z-index: 9999;
            max-width: 350px;
        }

        .notification-alert {
            background: #fff3cd;
            border: 1px solid #ffeaa7;
            border-radius: 8px;
            padding: 15px;
            margin-bottom: 10px;
            box-shadow: 0 4px 12px rgba(0,0,0,0.15);
            animation: slideInRight 0.3s ease-out;
        }

        .notification-alert .alert-header {
            display: flex;
            justify-content: space-between;
            align-items: flex-start;
            margin-bottom: 10px;
        }

        .notification-alert .alert-title {
            font-weight: bold;
            color: #856404;
            margin: 0;
            flex-grow: 1;
            font-size: 14px;
        }

        .notification-alert .activity-name {
            font-size: 13px;
            color: #666;
            margin-top: 5px;
            font-weight: normal;
        }

        .notification-alert .btn-close {
            background: none;
            border: none;
            font-size: 18px;
            cursor: pointer;
            color: #856404;
            padding: 0;
            margin-left: 10px;
            flex-shrink: 0;
        }

        .notification-alert .alert-buttons {
            display: flex;
            gap: 8px;
            flex-wrap: wrap;
        }

        .notification-alert .btn {
            padding: 6px 12px;
            border: 1px solid;
            border-radius: 4px;
            font-size: 12px;
            cursor: pointer;
            text-decoration: none;
            display: inline-block;
            transition: all 0.3s;
            background: white;
        }

        .notification-alert .btn-outline-primary {
            color: #007bff;
            border-color: #007bff;
        }

        .notification-alert .btn-outline-primary:hover {
            background: #007bff;
            color: white;
        }

        .notification-alert .btn-outline-warning {
            color: #ffc107;
            border-color: #ffc107;
        }

        .notification-alert .btn-outline-warning:hover {
            background: #ffc107;
            color: black;
        }

        .notification-alert .btn-outline-success {
            color: #28a745;
            border-color: #28a745;
        }

        .notification-alert .btn-outline-success:hover {
            background: #28a745;
            color: white;
        }

        @keyframes slideInRight {
            from {
                transform: translateX(100%);
                opacity: 0;
            }
            to {
                transform: translateX(0);
                opacity: 1;
            }
        }

        @keyframes pulse {
            0% { transform: scale(1); }
            50% { transform: scale(1.05); }
            100% { transform: scale(1); }
        }

        .pulse-notification {
            animation: pulse 2s infinite;
        }

        .notification-badge {
            position: absolute;
            top: -5px;
            right: -5px;
            background: #dc3545;
            color: white;
            border-radius: 50%;
            width: 20px;
            height: 20px;
            font-size: 12px;
            display: flex;
            align-items: center;
            justify-content: center;
        }

        .btn-notification {
            position: relative;
        }
        
        @media (max-width: 992px) {
            .sidebar {
                width: 70px;
            }
            
            .sidebar a span {
                display: none;
            }
            
            .sidebar a i {
                margin-right: 0;
            }
            
            .content-wrapper {
                margin-left: 70px;
            }
            
            .filtros-grid {
                grid-template-columns: 1fr;
            }
        }
        
        @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;
            }
            
            .stats-grid {
                grid-template-columns: 1fr;
            }
            
            .chart-wrapper {
                height: 350px;
            }

            .notification-container {
                top: 80px;
                right: 10px;
                left: 10px;
                max-width: none;
            }
            
            .notification-alert {
                padding: 12px;
            }
            
            .notification-alert .alert-buttons {
                flex-direction: column;
            }
            
            .notification-alert .btn {
                width: 100%;
                text-align: center;
            }
        }
        .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;
}

/* Responsividade */
@media (max-width: 1200px) {
    .filtros-grid-4col {
        grid-template-columns: repeat(2, 1fr);
        gap: 20px;
    }
}

@media (max-width: 768px) {
    .filtros-grid-4col {
        grid-template-columns: 1fr;
        gap: 15px;
    }
    
    .filtros-condicionais {
        flex-direction: column;
        gap: 15px;
    }
    
    .filtros-coluna {
        gap: 10px;
    }
}
    </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-pie"></i>
                    Análise Gráfica
                </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="exportarPDF()">
                        <i class="fas fa-file-pdf"></i> PDF
                    </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; ?>

            <div class="filtros-container">
    <form method="GET" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
        <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 Gráfico:</label>
                    <select name="tipo_grafico" id="tipo_grafico" onchange="atualizarFiltros()">
                        <option value="produtos_vendidos" <?= $filtros['tipo_grafico'] == 'produtos_vendidos' ? 'selected' : '' ?>>Produtos Mais Vendidos</option>
                        <option value="atividades_conclusao" <?= $filtros['tipo_grafico'] == 'atividades_conclusao' ? 'selected' : '' ?>>Atividades por Conclusão</option>
                        <option value="evolucao_vendas" <?= $filtros['tipo_grafico'] == 'evolucao_vendas' ? 'selected' : '' ?>>Evolução de Vendas</option>
                        <option value="vendas_vendedor" <?= $filtros['tipo_grafico'] == 'vendas_vendedor' ? 'selected' : '' ?>>Vendas por Vendedor</option>
                        <option value="faturamento_mensal" <?= $filtros['tipo_grafico'] == 'faturamento_mensal' ? 'selected' : '' ?>>Faturamento Mensal</option>
                        <option value="vendas_regiao" <?= $filtros['tipo_grafico'] == 'vendas_regiao' ? 'selected' : '' ?>>Vendas por Região</option>
                        <option value="vendas_categoria" <?= $filtros['tipo_grafico'] == 'vendas_categoria' ? 'selected' : '' ?>>Vendas por Categoria</option>
                        <option value="vendas_origem" <?= $filtros['tipo_grafico'] == 'vendas_origem' ? 'selected' : '' ?>>Vendas por Origem</option>
                        <option value="vendas_pais" <?= $filtros['tipo_grafico'] == 'vendas_pais' ? 'selected' : '' ?>>Vendas por País</option>
                    </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 $produto): ?>
                            <option value="<?= $produto['nome_produto'] ?>" <?= $filtros['produto'] == $produto['nome_produto'] ? 'selected' : '' ?>>
                                <?= htmlspecialchars($produto['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">Eixo Y:</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>
                    </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 (mantidos fora das colunas principais) -->
        <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>
        
        <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>
        </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: ?>
                <?php 
                // Calcular totais para os cards de estatísticas
                $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'];
                ?>
                
                <div class="stats-grid">
                    <div class="stat-card">
                        <div class="stat-icon primary">
                            <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 success">
                            <i class="fas fa-box"></i>
                        </div>
                        <div class="stat-value"><?= number_format($total_quantidade, 0, '', '.') ?></div>
                        <div class="stat-label">Quantidade Total</div>
                    </div>
                    
                    <div class="stat-card">
                        <div class="stat-icon warning">
                            <i class="fas fa-users"></i>
                        </div>
                        <div class="stat-value"><?= number_format($total_clientes, 0, '', '.') ?></div>
                        <div class="stat-label">Clientes</div>
                    </div>
                    
                    <div class="stat-card">
                        <div class="stat-icon danger">
                            <i class="fas fa-chart-line"></i>
                        </div>
                        <div class="stat-value"><?= count($dados_grafico) ?></div>
                        <div class="stat-label">Itens no Gráfico</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'] == 'polarArea' ? 'active' : '' ?>" onclick="mudarTipoGrafico('polarArea')">
                                    <i class="fas fa-bullseye"></i> Polar
                                </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) {
                                                            echo 'R$ ' . 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; ?>
        </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</div>

    <script>
        // ========== SISTEMA DE NOTIFICAÇÕES CORRIGIDO ========== //

        let notificacoesAtivas = new Map();

        // Verificar e pedir permissão para notificações
        function inicializarNotificacoes() {
            if (!("Notification" in window)) {
                console.log("Este navegador não suporta notificações desktop");
                return false;
            }

            if (Notification.permission === "default") {
                Notification.requestPermission().then(permission => {
                    if (permission === "granted") {
                        console.log("Permissão para notificações concedida");
                        verificarNotificacoesBrowser();
                    }
                });
            } else if (Notification.permission === "granted") {
                console.log("Permissão já concedida");
                verificarNotificacoesBrowser();
            }
            
            return Notification.permission === "granted";
        }

        // Verificar notificações no navegador
        function verificarNotificacoesBrowser() {
            console.log("=== VERIFICANDO NOTIFICAÇÕES ===");
            
            if (Notification.permission !== "granted") {
                return;
            }

            const timestamp = new Date().getTime();
            const url = `buscar_notificacoes.php?t=${timestamp}`;
            
            console.log("Buscando notificações:", url);
            
            fetch(url)
                .then(response => {
                    if (!response.ok) throw new Error('Erro: ' + response.status);
                    return response.json();
                })
                .then(data => {
                    console.log("Resposta notificações:", data);
                    
                    if (data && data.success === true) {
                        const notificacoes = data.notificacoes || [];
                        atualizarBadgeNotificacao(notificacoes.length);
                        
                        if (notificacoes.length > 0) {
                            console.log(`📢 ${notificacoes.length} notificação(ões) encontradas`);
                            notificacoes.forEach(notificacao => {
                                mostrarNotificacaoPersistente(notificacao);
                            });
                        } else {
                            console.log("✅ Nenhuma notificação pendente");
                        }
                    }
                })
                .catch(error => {
                    console.error('Erro ao verificar notificações:', error);
                });
        }

        // Adicionar badge de notificação no título da página
        function atualizarBadgeNotificacao(quantidade) {
            const title = document.title.replace(/^\(\d+\)\s*/, '');
            
            if (quantidade > 0) {
                document.title = `(${quantidade}) ${title}`;
            } else {
                document.title = title;
            }
        }

        function mostrarNotificacaoPersistente(notificacao) {
            if (!notificacao) return;
            
            try {
                const dataHora = new Date(notificacao.data_agendada);
                const agora = new Date();
                const diffMinutos = Math.round((dataHora - agora) / (1000 * 60));
                const isAtrasada = diffMinutos < 0;

                const dataFormatada = dataHora.toLocaleString('pt-BR', {
                    day: '2-digit',
                    month: '2-digit',
                    year: 'numeric',
                    hour: '2-digit',
                    minute: '2-digit'
                });

                let bodyText = `📋 ${notificacao.nome || 'Atividade'}\n`;
                bodyText += `📅 ${dataFormatada}\n`;
                
                if (notificacao.duracao_minutos) {
                    bodyText += `⏱️ ${formatarDuracao(notificacao.duracao_minutos)}\n`;
                }
                
                if (notificacao.Nome_Cliente) {
                    bodyText += `👤 ${notificacao.Nome_Cliente}\n`;
                }
                
                bodyText += isAtrasada ? 
                    `🔴 ATRASADA ${Math.abs(diffMinutos)}min` : 
                    `🟡 Em ${diffMinutos}min`;

                // Criar notificação persistente
                const notification = new Notification(
                    isAtrasada ? '🔴 Atividade Atrasada' : '⏰ Lembrete de Atividade',
                    {
                        body: bodyText,
                        icon: '/favicon_io/favicon-32x32.png',
                        badge: '/favicon_io/favicon-32x32.png',
                        requireInteraction: true, // Não fecha sozinha
                        tag: 'son-persistent-' + notificacao.id
                    }
                );

                // Armazenar referência
                notificacoesAtivas.set(notificacao.id, notification);

                // Quando a notificação é fechada
                notification.onclose = () => {
                    notificacoesAtivas.delete(notificacao.id);
                    fecharNotificacaoPagina(notificacao.id);
                };

                // Quando clica na notificação
                notification.onclick = () => {
                    notification.close();
                    abrirDetalhesAtividadeNotificacao(notificacao.id);
                };

                // Criar botões de ação na página
                criarBotoesAcaoNaPagina(notificacao);

            } catch (error) {
                console.error('Erro ao criar notificação persistente:', error);
            }
        }

        // Criar botões de ação na página - VERSÃO CORRIGIDA COM NOME DA ATIVIDADE
        function criarBotoesAcaoNaPagina(notificacao) {
            const atividadeId = notificacao.id;
            const existingContainer = document.getElementById(`botoes-notificacao-${atividadeId}`);
            if (existingContainer) {
                existingContainer.remove();
            }

            // Garantir que o container principal existe
            let notificationContainer = document.querySelector('.notification-container');
            if (!notificationContainer) {
                notificationContainer = document.createElement('div');
                notificationContainer.className = 'notification-container';
                document.body.appendChild(notificationContainer);
            }

            const alertDiv = document.createElement('div');
            alertDiv.id = `botoes-notificacao-${atividadeId}`;
            alertDiv.className = 'notification-alert';
            
            alertDiv.innerHTML = `
                <div class="alert-header">
                    <div>
                        <strong class="alert-title">⏰ Notificação Ativa</strong>
                        <div class="activity-name">${notificacao.nome || 'Atividade'}</div>
                    </div>
                    <button type="button" class="btn-close" onclick="fecharNotificacaoPagina(${atividadeId})">×</button>
                </div>
                <div class="alert-buttons">
                    <button type="button" class="btn btn-outline-primary" onclick="adiarNotificacao(${atividadeId}, 5)">
                        ⏰ 5min
                    </button>
                    <button type="button" class="btn btn-outline-warning" onclick="adiarNotificacao(${atividadeId}, 15)">
                        ⏰ 15min
                    </button>
                    <button type="button" class="btn btn-outline-success" onclick="abrirDetalhesAtividadeNotificacao(${atividadeId})">
                        📅 Ver
                    </button>
                </div>
            `;
            
            notificationContainer.appendChild(alertDiv);
        }

        function fecharNotificacaoPagina(atividadeId) {
            const container = document.getElementById(`botoes-notificacao-${atividadeId}`);
            if (container) {
                container.remove();
            }
            
            // Limpar container principal se estiver vazio
            const notificationContainer = document.querySelector('.notification-container');
            if (notificationContainer && notificationContainer.children.length === 0) {
                notificationContainer.remove();
            }
            
            // Fechar também a notificação do navegador
            const notification = notificacoesAtivas.get(atividadeId);
            if (notification) {
                notification.close();
            }
        }

        // Função para adiar notificação
        function adiarNotificacao(atividadeId, minutos) {
            // Fechar notificação atual
            fecharNotificacaoPagina(atividadeId);
            
            fetch('adiar_notificacao.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
                body: `id=${atividadeId}&minutos=${minutos}&csrf_token=<?php echo $_SESSION['csrf_token']; ?>`
            })
            .then(response => response.json())
            .then(data => {
                if (data.success) {
                    console.log(`Notificação adiada por ${minutos} minutos`);
                    
                    // Mostrar confirmação
                    if (Notification.permission === "granted") {
                        const confirmation = new Notification('⏰ Notificação Adiada', {
                            body: `Lembrete reagendado para daqui a ${minutos} minutos`,
                            icon: '/favicon_io/favicon-32x32.png',
                            requireInteraction: false
                        });
                        
                        // Fechar confirmação após 3 segundos
                        setTimeout(() => {
                            if (confirmation) confirmation.close();
                        }, 3000);
                    }
                } else {
                    console.error('Erro ao adiar notificação:', data.message);
                }
            })
            .catch(error => {
                console.error('Erro ao adiar notificação:', error);
            });
        }

        // Função para abrir detalhes da atividade a partir da notificação
        function abrirDetalhesAtividadeNotificacao(atividadeId) {
            // Fechar notificação
            fecharNotificacaoPagina(atividadeId);
            
            // Buscar dados da atividade e abrir modal
            fetch('buscar_atividade.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
                body: `id=${atividadeId}&csrf_token=<?php echo $_SESSION['csrf_token']; ?>`
            })
            .then(response => response.json())
            .then(data => {
                if (data.success) {
                    // Simular evento para abrir modal
                    const eventoSimulado = {
                        id: atividadeId,
                        title: data.atividade.nome,
                        extendedProps: data.atividade
                    };
                    console.log('Abrir detalhes da atividade:', data.atividade);
                    // mostrarDetalhesAtividade(eventoSimulado); // Descomente se tiver essa função
                    
                    // Redirecionar para a página de atividades como fallback
                    window.location.href = 'atividades.php?detalhes=' + atividadeId;
                } else {
                    alert('Erro ao carregar atividade: ' + data.message);
                }
            })
            .catch(error => {
                console.error('Erro ao buscar atividade:', error);
                alert('Erro ao carregar detalhes da atividade.');
            });
        }

        // Função para formatar duração
        function formatarDuracao(minutos) {
            if (minutos < 60) {
                return minutos + ' minutos';
            } else {
                const horas = Math.floor(minutos / 60);
                const minutosRestantes = minutos % 60;
                if (minutosRestantes === 0) {
                    return horas + ' hora' + (horas > 1 ? 's' : '');
                } else {
                    return horas + 'h' + (minutosRestantes < 10 ? '0' : '') + minutosRestantes + 'min';
                }
            }
        }

        // ========== INICIALIZAÇÃO DO SISTEMA DE NOTIFICAÇÕES ========== //

        // Inicializar sistema de notificações automaticamente
        document.addEventListener('DOMContentLoaded', function() {
            setTimeout(() => {
                console.log("Iniciando sistema de notificações...");
                inicializarNotificacoes();
            }, 3000); // Iniciar após 3 segundos

            // Verificar notificações a cada 1 minuto
            setInterval(() => {
                if (Notification.permission === "granted") {
                    console.log("Verificação automática de notificações...");
                    verificarNotificacoesBrowser();
                }
            }, 60000); // 1 minuto

            // Verificar imediatamente quando a página ganha foco
            document.addEventListener('visibilitychange', function() {
                if (!document.hidden && Notification.permission === "granted") {
                    console.log("Página em foco, verificando notificações...");
                    verificarNotificacoesBrowser();
                }
            });
        });

        // ========== FUNÇÕES EXISTENTES DO DASHBOARD ========== //

        // Dados para o gráfico
        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 ?>';
        
        // 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)'
        ];

        // Preparar datasets para o Chart.js
        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++;
        }

        // Configurações do gráfico
        const config = {
            type: chartType,
            data: {
                labels: chartLabels,
                datasets: datasets
            },
            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 += 'R$ ' + context.parsed.y.toFixed(2).replace('.', ',');
                                    } else {
                                        label += context.parsed.y;
                                    }
                                }
                                return label;
                            }
                        }
                    }
                },
                scales: {
                    y: {
                        beginAtZero: true,
                        ticks: {
                            callback: function(value) {
                                if (value >= 1000) {
                                    return 'R$ ' + value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
                                } else if (typeof value === 'number') {
                                    return 'R$ ' + value.toFixed(2);
                                }
                                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) {
            config.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
        const ctx = document.getElementById('graficoPrincipal').getContext('2d');
        let myChart = new Chart(ctx, config);

        // Funções de utilitárias
        function toggleSidebar() {
            const sidebar = document.getElementById('sidebar');
            const contentWrapper = document.getElementById('contentWrapper');
            
            sidebar.classList.toggle('collapsed');
            contentWrapper.classList.toggle('expanded');
        }
        
        function toggleSubmenu(id) {
            const submenu = document.getElementById(id);
            const menuItem = submenu.previousElementSibling;
            
            if (submenu.style.display === 'block') {
                submenu.style.display = 'none';
                menuItem.classList.remove('open');
            } else {
                submenu.style.display = 'block';
                menuItem.classList.add('open');
            }
        }
        
        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';
    
    // Mostrar filtros relevantes baseado no tipo de gráfico
    if (tipoGrafico === 'faturamento_mensal') {
        document.getElementById('filtro-ano').style.display = 'block';
    }
    
    if (tipoGrafico === 'atividades_conclusao') {
        document.getElementById('filtro-atividades').style.display = 'block';
    }
}
        
        function limparFiltros() {
            window.location.href = window.location.pathname;
        }
        
        function mudarTipoGrafico(tipo) {
            // Atualizar a URL com o novo tipo de visualização
            const url = new URL(window.location.href);
            url.searchParams.set('tipo_visualizacao', tipo);
            window.location.href = url.toString();
        }
        
        // Inicializar a visibilidade dos filtros
        document.addEventListener('DOMContentLoaded', function() {
            atualizarFiltros();
        });

        // 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', 'analise_<?= $filtros['tipo_grafico'] ?>_<?= date('Ymd_His') ?>.csv');
            link.style.visibility = 'hidden';
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
        }
        
        function exportarPDF() {
            // Usando a funcionalidade de impressão do navegador para "exportar" como PDF
            window.print();
        }
        
        function imprimirGrafico() {
            const canvas = document.getElementById('graficoPrincipal');
            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';
            }
            
            myChart.resize();
        }
    </script>
</body>
</html>