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

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

// Verifica se usuário está logado
if (!isset($_SESSION['logado']) || $_SESSION['logado'] !== true) {
    header('Location: login.php');
    exit;
}

// Informações da sessão
$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');

// Validação do tenant_id
if (!$tenant_id || !is_numeric($tenant_id)) {
    die("Erro: tenant_id inválido.");
}

// Exibir mensagem (caso não seja requisição AJAX)
if ($_SERVER['REQUEST_METHOD'] !== 'POST' || !isset($_POST['ajax'])) {
    if (isset($_SESSION['mensagem'])) {
        echo '<div class="mensagem-flutuante" id="mensagemFlutuante">'
           . htmlspecialchars($_SESSION['mensagem'])
           . '</div>';
        
        unset($_SESSION['mensagem']);
        
        echo '<script>
                setTimeout(function() {
                    const msg = document.getElementById("mensagemFlutuante");
                    if (msg) msg.style.display = "none";
                }, 3000);
              </script>';
    }
}

// Buscar se o usuário pode ver todos os clientes
$stmtPerm = $conn->prepare("SELECT ver_todos_clientes FROM usuarios WHERE id = ?");
$stmtPerm->bind_param("i", $usuario_id);
$stmtPerm->execute();
$resultPerm = $stmtPerm->get_result();
$linhaPerm = $resultPerm->fetch_assoc();
$ver_todos_clientes = isset($linhaPerm['ver_todos_clientes']) ? (int)$linhaPerm['ver_todos_clientes'] : 0;
$stmtPerm->close();

// Buscar dados para os filtros
$filtros = [];

// Buscar origens disponíveis
$stmtOrigens = $conn->prepare("SELECT DISTINCT Origem FROM clientes WHERE tenant_id = ? AND Origem IS NOT NULL AND Origem != '' ORDER BY Origem");
$stmtOrigens->bind_param("i", $tenant_id);
$stmtOrigens->execute();
$resultOrigens = $stmtOrigens->get_result();
$origens = [];
while ($row = $resultOrigens->fetch_assoc()) {
    $origens[] = $row['Origem'];
}
$stmtOrigens->close();

// Buscar estados disponíveis
$stmtEstados = $conn->prepare("SELECT DISTINCT Estado FROM clientes WHERE tenant_id = ? AND Estado IS NOT NULL AND Estado != '' ORDER BY Estado");
$stmtEstados->bind_param("i", $tenant_id);
$stmtEstados->execute();
$resultEstados = $stmtEstados->get_result();
$estados = [];
while ($row = $resultEstados->fetch_assoc()) {
    $estados[] = $row['Estado'];
}
$stmtEstados->close();

// Buscar países disponíveis
$stmtPaises = $conn->prepare("SELECT DISTINCT Pais FROM clientes WHERE tenant_id = ? AND Pais IS NOT NULL AND Pais != '' ORDER BY Pais");
$stmtPaises->bind_param("i", $tenant_id);
$stmtPaises->execute();
$resultPaises = $stmtPaises->get_result();
$paises = [];
while ($row = $resultPaises->fetch_assoc()) {
    $paises[] = $row['Pais'];
}
$stmtPaises->close();

// Buscar produtos disponíveis
$stmtProdutos = $conn->prepare("SELECT id, nome FROM lista_produtos WHERE tenant_id = ? AND ativo = 1 ORDER BY nome");
$stmtProdutos->bind_param("i", $tenant_id);
$stmtProdutos->execute();
$resultProdutos = $stmtProdutos->get_result();
$produtos = [];
while ($row = $resultProdutos->fetch_assoc()) {
    $produtos[] = $row;
}
$stmtProdutos->close();

// Buscar funis disponíveis
$stmtFunis = $conn->prepare("SELECT id, nome FROM funis WHERE tenant_id = ? AND ativo = 1 ORDER BY nome");
$stmtFunis->bind_param("i", $tenant_id);
$stmtFunis->execute();
$resultFunis = $stmtFunis->get_result();
$funis = [];
while ($row = $resultFunis->fetch_assoc()) {
    $funis[] = $row;
}
$stmtFunis->close();

// Buscar usuários responsáveis
$stmtResponsaveis = $conn->prepare("SELECT id, nome FROM usuarios WHERE tenant_id = ? AND ativo = 'sim' ORDER BY nome");
$stmtResponsaveis->bind_param("i", $tenant_id);
$stmtResponsaveis->execute();
$resultResponsaveis = $stmtResponsaveis->get_result();
$responsaveis = [];
while ($row = $resultResponsaveis->fetch_assoc()) {
    $responsaveis[] = $row;
}
$stmtResponsaveis->close();

// Construir query com filtros
$whereConditions = ["c.tenant_id = ?"];
$params = [$tenant_id];
$paramTypes = "i";

// Aplicar filtros de permissão
if (!($is_admin || $is_super_admin || $ver_todos_clientes === 1)) {
    $whereConditions[] = "c.responsavel = ?";
    $params[] = $usuario_id;
    $paramTypes .= "i";
}

// Processar filtros do formulário
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['aplicar_filtros'])) {
    // Filtro por nome/email/telefone
    if (!empty($_POST['busca_geral'])) {
        $busca = '%' . $conn->real_escape_string($_POST['busca_geral']) . '%';
        $whereConditions[] = "(c.Nome_Cliente LIKE ? OR c.Email LIKE ? OR c.Telefone LIKE ? OR c.Celular LIKE ?)";
        $params[] = $busca;
        $params[] = $busca;
        $params[] = $busca;
        $params[] = $busca;
        $paramTypes .= "ssss";
    }
    
// Filtro por origem
if (!empty($_POST['origem'])) {
    if ($_POST['origem'] === 'SEM_ORIGEM') {
        // Clientes sem origem (NULL ou vazio)
        $whereConditions[] = "(c.Origem IS NULL OR c.Origem = '')";
    } else {
        // Clientes com origem específica
        $whereConditions[] = "c.Origem = ?";
        $params[] = $_POST['origem'];
        $paramTypes .= "s";
    }
}
    
    // Filtro por estado
    if (!empty($_POST['estado'])) {
        $whereConditions[] = "c.Estado = ?";
        $params[] = $_POST['estado'];
        $paramTypes .= "s";
    }
    
    // Filtro por país
    if (!empty($_POST['pais'])) {
        $whereConditions[] = "c.Pais = ?";
        $params[] = $_POST['pais'];
        $paramTypes .= "s";
    }
    
    // Filtro por cidade
    if (!empty($_POST['cidade'])) {
        $whereConditions[] = "c.Cidade LIKE ?";
        $params[] = '%' . $_POST['cidade'] . '%';
        $paramTypes .= "s";
    }
    
    // Filtro por responsável
    if (!empty($_POST['responsavel'])) {
        $whereConditions[] = "c.responsavel = ?";
        $params[] = $_POST['responsavel'];
        $paramTypes .= "i";
    }
    
    // Filtro por funil
    if (!empty($_POST['funil_id'])) {
        $whereConditions[] = "c.funil_id = ?";
        $params[] = $_POST['funil_id'];
        $paramTypes .= "i";
    }
    
    // Filtro por etapa do funil
    if (!empty($_POST['etapa_funil_id'])) {
        $whereConditions[] = "c.etapa_funil_id = ?";
        $params[] = $_POST['etapa_funil_id'];
        $paramTypes .= "i";
    }
    
    // Filtro por data de cadastro (início)
    if (!empty($_POST['data_cadastro_inicio'])) {
        $whereConditions[] = "DATE(c.Data_Cadastro) >= ?";
        $params[] = $_POST['data_cadastro_inicio'];
        $paramTypes .= "s";
    }
    
    // Filtro por data de cadastro (fim)
    if (!empty($_POST['data_cadastro_fim'])) {
        $whereConditions[] = "DATE(c.Data_Cadastro) <= ?";
        $params[] = $_POST['data_cadastro_fim'];
        $paramTypes .= "s";
    }
    
// Filtro por produtos associados
if (!empty($_POST['produto_id'])) {
    if ($_POST['produto_id'] === 'SEM_PRODUTO') {
        // Clientes sem nenhum produto
        $whereConditions[] = "NOT EXISTS (SELECT 1 FROM cliente_produtos cp WHERE cp.cliente_id = c.id)";
    } else {
        // Clientes com produto específico
        $whereConditions[] = "EXISTS (SELECT 1 FROM cliente_produtos cp WHERE cp.cliente_id = c.id AND cp.lista_produto_id = ?)";
        $params[] = $_POST['produto_id'];
        $paramTypes .= "i";
    }
}
    
    // Filtro por clientes sem produtos
    if (!empty($_POST['sem_produto'])) {
        $whereConditions[] = "NOT EXISTS (SELECT 1 FROM cliente_produtos cp WHERE cp.cliente_id = c.id)";
    }
    
    // Filtro por CPF/CNPJ
    if (!empty($_POST['cpf_cnpj'])) {
        $whereConditions[] = "c.CPF_CNPJ LIKE ?";
        $params[] = '%' . $_POST['cpf_cnpj'] . '%';
        $paramTypes .= "s";
    }
    
    // Filtro por clientes excluídos/deletados
    if (isset($_POST['mostrar_deletados']) && $_POST['mostrar_deletados'] == '1') {
        $whereConditions[] = "c.deletado_em IS NOT NULL";
    } else {
        $whereConditions[] = "c.deletado_em IS NULL";
    }
} else {
    // Por padrão, não mostrar deletados
    $whereConditions[] = "c.deletado_em IS NULL";
}

// Montar WHERE clause
$whereClause = implode(" AND ", $whereConditions);

// ========== PAGINAÇÃO ==========
$itens_por_pagina = 20;
$pagina_atual = isset($_GET['pagina']) && is_numeric($_GET['pagina']) ? (int)$_GET['pagina'] : 1;
$offset = ($pagina_atual - 1) * $itens_por_pagina;

// Primeiro, contar o total de registros para paginação
$countQuery = "SELECT COUNT(*) as total FROM clientes c WHERE {$whereClause}";
$stmtCount = $conn->prepare($countQuery);

// Criar uma cópia dos parâmetros para a consulta de contagem
$params_count = $params;
$paramTypes_count = $paramTypes;

if (!empty($params_count)) {
    $stmtCount->bind_param($paramTypes_count, ...$params_count);
}
$stmtCount->execute();
$resultCount = $stmtCount->get_result();
$total_registros = $resultCount->fetch_assoc()['total'];
$total_paginas = ceil($total_registros / $itens_por_pagina);
$stmtCount->close();

// Buscar clientes conforme filtros com LIMIT para paginação
$query = "SELECT 
            c.*,
            f.nome AS nome_funil,
            ef.nome AS nome_etapa_funil,
            u.nome AS responsavel_nome,
            ur.nome AS usuario_cadastro_nome,
            (SELECT COUNT(*) FROM cliente_produtos cp WHERE cp.cliente_id = c.id) AS total_produtos
          FROM clientes c 
          LEFT JOIN usuarios u ON c.responsavel = u.id 
          LEFT JOIN usuarios ur ON c.usuario_cadastro = ur.id 
          LEFT JOIN funis f ON c.funil_id = f.id AND f.tenant_id = c.tenant_id
          LEFT JOIN etapas_funis ef ON c.etapa_funil_id = ef.id AND ef.funil_id = c.funil_id
          WHERE {$whereClause}
          ORDER BY c.Nome_Cliente ASC
          LIMIT ? OFFSET ?";

$stmt = $conn->prepare($query);

// Adicionar parâmetros de paginação
$params_paginacao = $params;
$paramTypes_paginacao = $paramTypes . "ii";
$params_paginacao[] = $itens_por_pagina;
$params_paginacao[] = $offset;

// Bind parameters
if (!empty($params_paginacao)) {
    $stmt->bind_param($paramTypes_paginacao, ...$params_paginacao);
}

$stmt->execute();
$resultado = $stmt->get_result();

if (!$resultado) {
    die("Erro ao buscar clientes: " . $conn->error);
}

$clientes = [];
while ($cliente = $resultado->fetch_assoc()) {
    // Converter valores booleanos para texto legível
    $cliente['concluida_texto'] = ($cliente['concluida'] == 1 || $cliente['concluida'] === '1') ? 'Sim' : 'Não';
    
    // Buscar produtos do cliente
    $stmtProd = $conn->prepare("SELECT lp.nome FROM cliente_produtos cp JOIN lista_produtos lp ON cp.lista_produto_id = lp.id WHERE cp.cliente_id = ?");
    $stmtProd->bind_param("i", $cliente['id']);
    $stmtProd->execute();
    $resultProd = $stmtProd->get_result();
    $produtosCliente = [];
    while ($prod = $resultProd->fetch_assoc()) {
        $produtosCliente[] = $prod['nome'];
    }
    $stmtProd->close();
    $cliente['produtos'] = implode(', ', $produtosCliente);
    
    // Garantir que todos os campos existam e tenham valor padrão
    $camposParaGarantir = [
        'Nome_Cliente' => '',
        'CPF_CNPJ' => '',
        'Email' => '',
        'Telefone' => '',
        'Telefone2' => '',
        'Celular' => '',
        'Origem' => '',
        'origem_id' => '',
        'Endereco' => '',
        'Cidade' => '',
        'Estado' => '',
        'Bairro' => '',
        'Complemento' => '',
        'CEP' => '',
        'instagram' => '',
        'linkedin' => '',
        'Obs' => '',
        'Observacoes' => '',
        'deletado_em' => '',
        'atualizado_em' => '',
        'usuario_cadastro' => '',
        'usuario_cadastro_nome' => '',
        'regiao' => '',
        'Pais' => 'Brasil',
        'responsavel' => '',
        'responsavel_nome' => 'Não atribuído',
        'provincia' => '',
        'quota_arquivos_mb' => '',
        'espaco_utilizado_mb' => '',
        'nome_funil' => 'Não definido',
        'nome_etapa_funil' => 'Não definida',
        'produtos' => '',
        'total_produtos' => 0
    ];
    
    foreach ($camposParaGarantir as $campo => $valorPadrao) {
        if (!isset($cliente[$campo]) || $cliente[$campo] === null) {
            $cliente[$campo] = $valorPadrao;
        }
    }
    
    $clientes[] = $cliente;
}

$stmt->close();

// Buscar etapas do funil selecionado via AJAX
?>

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <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 charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>SON - Lista de Clientes</title>
    <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/sweetalert2@11"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"></script>
    <style>
        * {
            box-sizing: border-box;
        }

        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
            background-color: #f5f5f5;
        }
        
        .header-fixed {
            position: fixed;
            top: 0;
            left: 0;
            right: 0;
            background-color: #f5f5f5;
            padding: 15px 20px;
            z-index: 1000;
            box-shadow: 0 2px 5px rgba(0,0,0,0.1);
            display: flex;
            justify-content: space-between;
            align-items: center;
        }
        
        .header-fixed img {
            height: 50px;
            margin-right: 15px;
        }
        
        .header-fixed h2 {
            margin: 0;
            flex-grow: 1;
            text-align: center;
        }
        
        /* Menu Lateral */
        .sidebar {
            position: fixed;
            left: 0;
            top: 80px;
            height: calc(100vh - 80px);
            width: 60px;
            background: white;
            box-shadow: 2px 0 5px rgba(0,0,0,0.1);
            z-index: 999;
            transition: width 0.3s ease;
            overflow-x: hidden;
        }
        
        .sidebar-menu {
            list-style: none;
            padding: 0;
            margin: 0;
        }
        
        .sidebar-menu li {
            border-bottom: 1px solid #eee;
        }
        
        .sidebar-menu a {
            display: flex;
            align-items: center;
            padding: 15px 20px;
            text-decoration: none;
            color: #333;
            white-space: nowrap;
            transition: background-color 0.3s;
        }
        
        .sidebar-menu i {
            width: 24px;
            height: 24px;
            margin-right: 15px;
            text-align: center;
            flex-shrink: 0;
        }
        
        .sidebar-menu .menu-text {
            opacity: 0;
            transition: opacity 0.3s ease;
        }
        
        .submenu-sidebar {
            max-height: 0;
            overflow: hidden;
            transition: max-height 0.3s ease;
            background-color: #f9f9f9;
        }
        
        .submenu-sidebar a {
            padding-left: 50px;
            font-size: 0.9em;
        }
        
        .content-wrapper {
            margin-top: 0px;
            padding: 60px;
            margin-left: 60px;
            transition: margin-left 0.3s ease;
        }
        
        .user-info {
            display: flex;
            align-items: center;
            gap: 10px;
        }
        
        .user-photo {
            width: 40px;
            height: 40px;
            border-radius: 50%;
        }
        
        .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;
        }
        
        /* Conteúdo Principal */
        .container {
            max-width: 100%;
            margin: 0 auto;
            background: white;
            padding: 25px;
            border-radius: 8px;
            box-shadow: 0 0 15px rgba(0, 0, 0, 0.05);
        }
        
        /* Painel de Filtros */
        .filtros-panel {
            background: #f8f9fa;
            border: 1px solid #e0e0e0;
            border-radius: 6px;
            padding: 20px;
            margin-bottom: 25px;
        }
        
        .filtros-titulo {
            display: flex;
            align-items: center;
            justify-content: space-between;
            margin-bottom: 15px;
            cursor: pointer;
            font-weight: 600;
            color: #2c3e50;
        }
        
        .filtros-titulo i {
            transition: transform 0.3s;
        }
        
        .filtros-titulo.collapsed i {
            transform: rotate(-90deg);
        }
        
        .filtros-content {
            transition: max-height 0.3s ease;
            overflow: hidden;
        }
        
        .filtros-content.collapsed {
            max-height: 0;
        }
        
        .filtros-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
            gap: 15px;
        }
        
        .filtro-group {
            margin-bottom: 10px;
        }
        
        .filtro-group label {
            display: block;
            margin-bottom: 5px;
            font-size: 0.85rem;
            color: #666;
            font-weight: 500;
        }
        
        .filtro-group input,
        .filtro-group select {
            width: 100%;
            padding: 8px 10px;
            border: 1px solid #ddd;
            border-radius: 4px;
            font-size: 0.9rem;
        }
        
        .filtro-group input:focus,
        .filtro-group select:focus {
            border-color: #3498db;
            outline: none;
            box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.2);
        }
        
        .filtros-actions {
            display: flex;
            gap: 10px;
            margin-top: 20px;
            justify-content: flex-end;
        }
        
        .btn-filtro {
            padding: 10px 20px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
            font-size: 0.9rem;
            display: flex;
            align-items: center;
            gap: 8px;
            transition: all 0.3s;
        }
        
        .btn-filtro-aplicar {
            background-color: #3498db;
            color: white;
        }
        
        .btn-filtro-aplicar:hover {
            background-color: #2980b9;
        }
        
        .btn-filtro-limpar {
            background-color: #95a5a6;
            color: white;
        }
        
        .btn-filtro-limpar:hover {
            background-color: #7f8c8d;
        }
        
        /* Tabela de Clientes - Versão Compacta */
        .table-responsive {
            overflow-x: auto;
            margin: 0 -5px;
            width: calc(100% + 10px);
        }
        
        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
            font-size: 0.85rem;
            table-layout: fixed;
        }
        
        th, td {
            padding: 10px 8px;
            text-align: left;
            border-bottom: 1px solid #e0e0e0;
            vertical-align: middle;
            word-wrap: break-word;
            overflow: hidden;
        }
        
        /* Definindo larguras fixas para as colunas */
        th:nth-child(1), td:nth-child(1) { width: 40px; }  /* Checkbox */
        th:nth-child(2), td:nth-child(2) { width: 180px; } /* Nome */
        th:nth-child(3), td:nth-child(3) { width: 200px; } /* Email */
        th:nth-child(4), td:nth-child(4) { width: 120px; } /* Telefone */
        th:nth-child(5), td:nth-child(5) { width: 100px; } /* Origem */
        th:nth-child(6), td:nth-child(6) { width: 80px; }  /* Estado */
        th:nth-child(7), td:nth-child(7) { width: 80px; }  /* País */
        th:nth-child(8), td:nth-child(8) { width: 120px; } /* Produtos */
        th:nth-child(9), td:nth-child(9) { width: 130px; } /* Responsável */
        th:nth-child(10), td:nth-child(10) { width: 180px; } /* Ações */
        
        th {
            background-color: #f8f9fa;
            font-weight: 600;
            color: #2c3e50;
            text-transform: uppercase;
            font-size: 0.8rem;
            letter-spacing: 0.3px;
        }
        
        tr:hover {
            background-color: #f8f9fa;
        }
        
        /* Truncar texto longo */
        .truncate-text {
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
            max-width: 100%;
            display: block;
        }
        
        /* Badges */
        .badge {
            display: inline-block;
            padding: 3px 6px;
            border-radius: 3px;
            font-size: 0.75rem;
            font-weight: 500;
            white-space: nowrap;
        }
        
        .badge-success {
            background-color: #d4edda;
            color: #155724;
        }
        
        .badge-warning {
            background-color: #fff3cd;
            color: #856404;
        }
        
        .badge-danger {
            background-color: #f8d7da;
            color: #721c24;
        }
        
        .badge-info {
            background-color: #d1ecf1;
            color: #0c5460;
        }
        
        .badge-produto {
            background-color: #e0f2fe;
            color: #0369a1;
            margin: 2px;
            font-size: 0.7rem;
        }
        
        /* Botões de Ação - Versão Compacta */
        .acoes {
            display: flex;
            gap: 5px;
            flex-wrap: wrap;
        }
        
        .btn {
            padding: 5px 8px;
            border: none;
            border-radius: 3px;
            color: white;
            cursor: pointer;
            font-size: 0.75rem;
            transition: all 0.2s;
            display: inline-flex;
            align-items: center;
            gap: 3px;
            white-space: nowrap;
        }
        
        .btn i {
            font-size: 0.7rem;
        }
        
        .btn:hover {
            transform: translateY(-1px);
            box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1);
        }
        
        .btn:active {
            transform: translateY(0);
        }
        
        .btn-editar {
            background-color: #3498db;
        }
        
        .btn-editar:hover {
            background-color: #2980b9;
        }
        
        .btn-excluir {
            background-color: #e74c3c;
        }
        
        .btn-excluir:hover {
            background-color: #c0392b;
        }
        
        .btn-detalhes {
            background-color: #2ecc71;
        }
        
        .btn-detalhes:hover {
            background-color: #27ae60;
        }
        
        .btn-exportar {
            background-color: #2ecc71;
            padding: 8px 15px;
            font-size: 0.9rem;
        }
        
        .btn-exportar:hover {
            background-color: #27ae60;
        }
        
        .btn-export-individual {
            background-color: #9b59b6;
            padding: 5px 8px;
            border: none;
            border-radius: 3px;
            color: white;
            cursor: pointer;
            font-size: 0.75rem;
            display: inline-flex;
            align-items: center;
            gap: 3px;
            transition: all 0.2s;
            white-space: nowrap;
        }
        
        .btn-export-individual:hover {
            background-color: #8e44ad;
            transform: translateY(-1px);
        }
        
        /* Barra Superior */
        .top-bar {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 25px;
            flex-wrap: wrap;
            gap: 15px;
        }
        
        .search-container {
            display: flex;
            align-items: center;
            gap: 15px;
        }
        
        .search-container input[type="text"] {
            padding: 10px 15px;
            width: 250px;
            border-radius: 4px;
            border: 1px solid #ddd;
            font-size: 0.95rem;
            transition: all 0.3s;
        }
        
        .search-container input[type="text"]:focus {
            border-color: #3498db;
            outline: none;
            box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.2);
        }
        
        /* Mensagem Flutuante */
        .mensagem-flutuante {
            position: fixed;
            top: 90px;
            right: 25px;
            padding: 14px 24px;
            background: #2ecc71;
            color: white;
            border-radius: 4px;
            z-index: 2000;
            box-shadow: 0 3px 10px rgba(0, 0, 0, 0.15);
            font-weight: 500;
            animation: slideIn 0.3s ease-out;
        }
        
        @keyframes slideIn {
            from {
                transform: translateY(-20px);
                opacity: 0;
            }
            to {
                transform: translateY(0);
                opacity: 1;
            }
        }
        
        /* Classes Utilitárias */
        .text-center {
            text-align: center;
        }
        
        /* Controles de seleção múltipla */
        .selection-controls {
            display: flex;
            align-items: center;
            gap: 15px;
            margin-bottom: 15px;
            padding: 10px 15px;
            background: #f8f9fa;
            border-radius: 6px;
            border: 1px solid #e0e0e0;
            flex-wrap: wrap;
        }
        
        .selection-info {
            font-size: 0.9rem;
            color: #666;
            font-weight: 500;
        }
        
        .btn-batch-delete {
            background-color: #e74c3c;
            padding: 8px 16px;
            border: none;
            border-radius: 4px;
            color: white;
            cursor: pointer;
            font-size: 0.9rem;
            display: flex;
            align-items: center;
            gap: 5px;
            transition: all 0.3s;
        }
        
        .btn-batch-delete:hover:not(:disabled) {
            background-color: #c0392b;
            transform: translateY(-2px);
        }
        
        .btn-batch-delete:disabled {
            background-color: #95a5a6;
            cursor: not-allowed;
            opacity: 0.6;
        }
        
        .btn-batch-export {
            background-color: #2ecc71;
            padding: 8px 16px;
            border: none;
            border-radius: 4px;
            color: white;
            cursor: pointer;
            font-size: 0.9rem;
            display: flex;
            align-items: center;
            gap: 5px;
            transition: all 0.3s;
        }
        
        .btn-batch-export:hover:not(:disabled) {
            background-color: #27ae60;
            transform: translateY(-2px);
        }
        
        .btn-batch-export:disabled {
            background-color: #95a5a6;
            cursor: not-allowed;
            opacity: 0.6;
        }
        
        .select-all-checkbox {
            margin-right: 5px;
            width: 16px;
            height: 16px;
            cursor: pointer;
        }
        
        .client-checkbox {
            width: 16px;
            height: 16px;
            cursor: pointer;
        }
        
        .checkbox-cell {
            width: 40px;
            text-align: center;
        }
        
        /* Tooltip */
        .tooltip {
            position: relative;
            display: inline-block;
        }
        
        .tooltip .tooltip-text {
            visibility: hidden;
            width: 200px;
            background-color: #333;
            color: #fff;
            text-align: center;
            border-radius: 4px;
            padding: 5px;
            position: absolute;
            z-index: 1;
            bottom: 125%;
            left: 50%;
            margin-left: -100px;
            opacity: 0;
            transition: opacity 0.3s;
            font-size: 0.75rem;
            pointer-events: none;
        }
        
        .tooltip:hover .tooltip-text {
            visibility: visible;
            opacity: 1;
        }
        
        /* Indicador de produtos */
        .produtos-indicator {
            display: flex;
            align-items: center;
            gap: 5px;
        }
        
        .produtos-count {
            background-color: #3498db;
            color: white;
            padding: 2px 6px;
            border-radius: 10px;
            font-size: 0.7rem;
            font-weight: bold;
        }
        
        /* Estilos para paginação */
        .pagination {
            display: flex;
            justify-content: center;
            align-items: center;
            margin-top: 30px;
            gap: 5px;
            flex-wrap: wrap;
        }
        
        .pagination a, .pagination span {
            display: inline-flex;
            align-items: center;
            justify-content: center;
            min-width: 40px;
            height: 40px;
            padding: 0 10px;
            border: 1px solid #ddd;
            background-color: white;
            color: #333;
            text-decoration: none;
            border-radius: 4px;
            transition: all 0.3s;
            font-size: 0.9rem;
        }
        
        .pagination a:hover {
            background-color: #3498db;
            color: white;
            border-color: #3498db;
        }
        
        .pagination .current {
            background-color: #3498db;
            color: white;
            border-color: #3498db;
        }
        
        .pagination .disabled {
            color: #ccc;
            cursor: not-allowed;
            pointer-events: none;
            background-color: #f8f9fa;
        }
        
        .pagination-info {
            text-align: center;
            margin-top: 15px;
            color: #666;
            font-size: 0.9rem;
        }
        
        /* Responsividade */
        @media (max-width: 1400px) {
            table {
                font-size: 0.8rem;
            }
            
            th, td {
                padding: 8px 5px;
            }
            
            .btn, .btn-export-individual {
                padding: 4px 6px;
                font-size: 0.7rem;
            }
        }
        
        @media (max-width: 1200px) {
            .filtros-grid {
                grid-template-columns: repeat(3, 1fr);
            }
        }
        
        @media (max-width: 768px) {
            .header-fixed {
                padding: 12px 15px;
            }
            
            .header-fixed h2 {
                font-size: 1.3rem;
            }
            
            .content-wrapper {
                margin-top: 80px;
                padding: 15px;
                margin-left: 0;
            }
            
            .container {
                padding: 15px;
            }
            
            .top-bar {
                flex-direction: column;
                align-items: flex-start;
            }
            
            .search-container {
                width: 100%;
            }
            
            .search-container input[type="text"] {
                width: 100%;
            }
            
            .filtros-grid {
                grid-template-columns: 1fr;
            }
            
            .selection-controls {
                flex-direction: column;
                align-items: flex-start;
            }
            
            .acoes {
                flex-direction: column;
                gap: 5px;
            }
            
            .btn, .btn-export-individual {
                width: 100%;
                justify-content: center;
            }
        }
    </style>
</head>
<body>

    <?php include 'menu_lateral.php'; ?>

    <!-- Conteúdo Principal -->
    <div class="content-wrapper">
        <div class="container">
            <div class="top-bar">
                <h1>Lista de Clientes</h1>
                <div class="search-container">
                    <span>Total: <strong id="contadorClientes"><?= $total_registros ?></strong></span>
                    <span>Mostrando: <strong><?= count($clientes) ?></strong></span>
                    <button class="btn btn-exportar" onclick="exportarTodos()">
                        <i class="fas fa-file-excel"></i> Exportar Todos
                    </button>
                </div>
            </div>

            <!-- Painel de Filtros -->
            <div class="filtros-panel">
                <div class="filtros-titulo" onclick="toggleFiltros()">
                    <span><i class="fas fa-filter"></i> Filtros Avançados</span>
                    <i class="fas fa-chevron-down" id="filtrosIcon"></i>
                </div>
                <div class="filtros-content" id="filtrosContent">
                    <form method="POST" id="formFiltros">
                        <div class="filtros-grid">
                            <!-- Busca Geral -->
                            <div class="filtro-group">
                                <label><i class="fas fa-search"></i> Busca Geral</label>
                                <input type="text" name="busca_geral" placeholder="Nome, Email, Telefone..." 
                                       value="<?= htmlspecialchars($_POST['busca_geral'] ?? '') ?>">
                            </div>
                            
<!-- Origem -->
<div class="filtro-group">
    <label><i class="fas fa-tag"></i> Origem</label>
    <select name="origem">
        <option value="">Todas</option>
        <option value="SEM_ORIGEM" <?= (isset($_POST['origem']) && $_POST['origem'] == 'SEM_ORIGEM') ? 'selected' : '' ?>>
            Nenhuma origem
        </option>
        <?php foreach ($origens as $origem): ?>
            <option value="<?= htmlspecialchars($origem) ?>" 
                <?= (isset($_POST['origem']) && $_POST['origem'] == $origem) ? 'selected' : '' ?>>
                <?= htmlspecialchars($origem) ?>
            </option>
        <?php endforeach; ?>
    </select>
</div>
                            
                            <!-- Estado -->
                            <div class="filtro-group">
                                <label><i class="fas fa-map-marker-alt"></i> Estado</label>
                                <select name="estado">
                                    <option value="">Todos</option>
                                    <?php foreach ($estados as $estado): ?>
                                        <option value="<?= htmlspecialchars($estado) ?>" 
                                            <?= (isset($_POST['estado']) && $_POST['estado'] == $estado) ? 'selected' : '' ?>>
                                            <?= htmlspecialchars($estado) ?>
                                        </option>
                                    <?php endforeach; ?>
                                </select>
                            </div>
                            
                            <!-- País -->
                            <div class="filtro-group">
                                <label><i class="fas fa-globe"></i> País</label>
                                <select name="pais">
                                    <option value="">Todos</option>
                                    <?php foreach ($paises as $pais): ?>
                                        <option value="<?= htmlspecialchars($pais) ?>" 
                                            <?= (isset($_POST['pais']) && $_POST['pais'] == $pais) ? 'selected' : '' ?>>
                                            <?= htmlspecialchars($pais) ?>
                                        </option>
                                    <?php endforeach; ?>
                                </select>
                            </div>
                            
                            <!-- Cidade -->
                            <div class="filtro-group">
                                <label><i class="fas fa-city"></i> Cidade</label>
                                <input type="text" name="cidade" placeholder="Digite a cidade" 
                                       value="<?= htmlspecialchars($_POST['cidade'] ?? '') ?>">
                            </div>
                            
                            <!-- Responsável -->
                            <div class="filtro-group">
                                <label><i class="fas fa-user"></i> Responsável</label>
                                <select name="responsavel">
                                    <option value="">Todos</option>
                                    <?php foreach ($responsaveis as $resp): ?>
                                        <option value="<?= $resp['id'] ?>" 
                                            <?= (isset($_POST['responsavel']) && $_POST['responsavel'] == $resp['id']) ? 'selected' : '' ?>>
                                            <?= htmlspecialchars($resp['nome']) ?>
                                        </option>
                                    <?php endforeach; ?>
                                </select>
                            </div>
                            
                            <!-- Funil -->
                            <div class="filtro-group">
                                <label><i class="fas fa-funnel-dollar"></i> Funil</label>
                                <select name="funil_id" id="funil_select" onchange="carregarEtapas(this.value)">
                                    <option value="">Todos</option>
                                    <?php foreach ($funis as $funil): ?>
                                        <option value="<?= $funil['id'] ?>" 
                                            <?= (isset($_POST['funil_id']) && $_POST['funil_id'] == $funil['id']) ? 'selected' : '' ?>>
                                            <?= htmlspecialchars($funil['nome']) ?>
                                        </option>
                                    <?php endforeach; ?>
                                </select>
                            </div>
                            
                            <!-- Etapa do Funil -->
                            <div class="filtro-group">
                                <label><i class="fas fa-chart-line"></i> Etapa</label>
                                <select name="etapa_funil_id" id="etapa_funil_select">
                                    <option value="">Todas</option>
                                </select>
                            </div>
                            
<!-- Produto -->
<div class="filtro-group">
    <label><i class="fas fa-box"></i> Produto</label>
    <select name="produto_id">
        <option value="">Todos</option>
        <option value="SEM_PRODUTO" <?= (isset($_POST['produto_id']) && $_POST['produto_id'] == 'SEM_PRODUTO') ? 'selected' : '' ?>>
            Sem produto
        </option>
        <?php foreach ($produtos as $produto): ?>
            <option value="<?= $produto['id'] ?>" 
                <?= (isset($_POST['produto_id']) && $_POST['produto_id'] == $produto['id']) ? 'selected' : '' ?>>
                <?= htmlspecialchars($produto['nome']) ?>
            </option>
        <?php endforeach; ?>
    </select>
</div>
                            
                           
                            
                            <!-- CPF/CNPJ -->
                            <div class="filtro-group">
                                <label><i class="fas fa-id-card"></i> CPF/CNPJ</label>
                                <input type="text" name="cpf_cnpj" placeholder="Digite CPF ou CNPJ" 
                                       value="<?= htmlspecialchars($_POST['cpf_cnpj'] ?? '') ?>">
                            </div>
                            
                            <!-- Data Cadastro Início -->
                            <div class="filtro-group">
                                <label><i class="fas fa-calendar-alt"></i> Cadastro (Início)</label>
                                <input type="date" name="data_cadastro_inicio" 
                                       value="<?= htmlspecialchars($_POST['data_cadastro_inicio'] ?? '') ?>">
                            </div>
                            
                            <!-- Data Cadastro Fim -->
                            <div class="filtro-group">
                                <label><i class="fas fa-calendar-alt"></i> Cadastro (Fim)</label>
                                <input type="date" name="data_cadastro_fim" 
                                       value="<?= htmlspecialchars($_POST['data_cadastro_fim'] ?? '') ?>">
                            </div>
                            
                            
                        </div>
                        
                        <div class="filtros-actions">
                            <button type="submit" name="aplicar_filtros" class="btn-filtro btn-filtro-aplicar">
                                <i class="fas fa-search"></i> Aplicar Filtros
                            </button>
                            <button type="button" class="btn-filtro btn-filtro-limpar" onclick="limparFiltros()">
                                <i class="fas fa-eraser"></i> Limpar Filtros
                            </button>
                        </div>
                    </form>
                </div>
            </div>

            <!-- Controles de seleção múltipla -->
            <div class="selection-controls" id="selectionControls" style="display: none;">
                <div>
                    <input type="checkbox" id="selectAll" class="select-all-checkbox">
                    <label for="selectAll">Selecionar todos</label>
                </div>
                <div class="selection-info" id="selectedCount">0 cliente(s) selecionado(s)</div>
                <button class="btn-batch-export" id="exportSelected" onclick="exportarSelecionados()" disabled>
                    <i class="fas fa-file-excel"></i> Exportar Selecionados
                </button>
                <button class="btn-batch-delete" id="deleteSelected" onclick="confirmarExclusaoMultipla()" disabled>
                    <i class="fas fa-trash-alt"></i> Excluir Selecionados
                </button>
            </div>

            <div class="table-responsive">
                <table>
                    <thead>
                        <tr>
                            <th class="checkbox-cell">
                                <input type="checkbox" id="selectAllHeader" class="client-checkbox">
                            </th>
                            <th>Nome</th>
                            <th>Email</th>
                            <th>Telefone</th>
                            <th>Origem</th>
                            <th>Estado</th>
                            <th>País</th>
                            <th>Produtos</th>
                            <th>Responsável</th>
                            <th>Ações</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php if (count($clientes) > 0): ?>
                            <?php foreach ($clientes as $cliente): ?>
                                <tr <?= $cliente['deletado_em'] ? 'style="opacity: 0.6; background-color: #f8d7da;"' : '' ?>>
                                    <td class="checkbox-cell">
                                        <input type="checkbox" class="client-checkbox cliente-item" value="<?= $cliente['id'] ?>">
                                    </td>
                                    <td>
                                        <span class="truncate-text" title="<?= htmlspecialchars($cliente['Nome_Cliente']) ?>">
                                            <?= htmlspecialchars($cliente['Nome_Cliente']) ?>
                                            <?php if ($cliente['deletado_em']): ?>
                                                <span class="badge badge-danger">Excluído</span>
                                            <?php endif; ?>
                                        </span>
                                    </td>
                                    <td>
                                        <span class="truncate-text" title="<?= htmlspecialchars($cliente['Email']) ?>">
                                            <?= htmlspecialchars($cliente['Email']) ?>
                                        </span>
                                    </td>
                                    <td>
                                        <span class="truncate-text" title="<?= htmlspecialchars($cliente['Telefone'] ?: $cliente['Celular']) ?>">
                                            <?= htmlspecialchars($cliente['Telefone'] ?: $cliente['Celular']) ?>
                                        </span>
                                    </td>
                                    <td>
                                        <?php if ($cliente['Origem']): ?>
                                            <span class="badge badge-info truncate-text" title="<?= htmlspecialchars($cliente['Origem']) ?>">
                                                <?= htmlspecialchars($cliente['Origem']) ?>
                                            </span>
                                        <?php endif; ?>
                                    </td>
                                    <td>
                                        <span class="truncate-text" title="<?= htmlspecialchars($cliente['Estado']) ?>">
                                            <?= htmlspecialchars($cliente['Estado']) ?>
                                        </span>
                                    </td>
                                    <td>
                                        <span class="truncate-text" title="<?= htmlspecialchars($cliente['Pais']) ?>">
                                            <?= htmlspecialchars($cliente['Pais']) ?>
                                        </span>
                                    </td>
                                    <td>
                                        <?php if ($cliente['total_produtos'] > 0): ?>
                                            <div class="produtos-indicator">
                                                <span class="badge badge-success">
                                                    <i class="fas fa-box"></i> <?= $cliente['total_produtos'] ?>
                                                </span>
                                                <div class="tooltip">
                                                    <i class="fas fa-info-circle"></i>
                                                    <span class="tooltip-text"><?= htmlspecialchars($cliente['produtos']) ?></span>
                                                </div>
                                            </div>
                                        <?php else: ?>
                                            <span class="badge badge-warning">Sem produtos</span>
                                        <?php endif; ?>
                                    </td>
                                    <td>
                                        <span class="truncate-text" title="<?= htmlspecialchars($cliente['responsavel_nome']) ?>">
                                            <?= htmlspecialchars($cliente['responsavel_nome']) ?>
                                        </span>
                                    </td>
                                    <td class="acoes">
                                        <button class="btn btn-editar" onclick="window.location.href='editar_cliente.php?id=<?= $cliente['id'] ?>'">
                                            <i class="fas fa-eye"></i> Detalhes
                                        </button>
                                        <button class="btn-export-individual" onclick="exportarCliente(<?= $cliente['id'] ?>)">
                                            <i class="fas fa-file-export"></i> Exportar
                                        </button>
                                        <?php if (!$cliente['deletado_em']): ?>
                                            <button class="btn btn-excluir" onclick="confirmarExclusao(<?= $cliente['id'] ?>, '<?= htmlspecialchars(addslashes($cliente['Nome_Cliente'])) ?>')">
                                                <i class="fas fa-trash-alt"></i> Excluir
                                            </button>
                                        <?php endif; ?>
                                    </td>
                                </tr>
                            <?php endforeach; ?>
                        <?php else: ?>
                            <tr>
                                <td colspan="10" class="text-center">Nenhum cliente encontrado com os filtros aplicados.</td>
                            </tr>
                        <?php endif; ?>
                    </tbody>
                </table>
            </div>
            
            <!-- Informações de Paginação -->
            <div class="pagination-info">
                Mostrando <?= count($clientes) ?> de <?= $total_registros ?> clientes (página <?= $pagina_atual ?> de <?= $total_paginas ?>)
            </div>
            
            <!-- Paginação -->
            <?php if ($total_paginas > 1): ?>
            <div class="pagination">
                <?php 
                // Função para gerar links de paginação preservando os filtros
                function getPaginationUrl($page) {
                    $query_params = $_GET;
                    $query_params['pagina'] = $page;
                    return '?' . http_build_query($query_params);
                }
                ?>
                
                <!-- Botão Primeira Página -->
                <?php if ($pagina_atual > 1): ?>
                    <a href="<?= getPaginationUrl(1) ?>">&laquo;</a>
                <?php else: ?>
                    <span class="disabled">&laquo;</span>
                <?php endif; ?>
                
                <!-- Botão Anterior -->
                <?php if ($pagina_atual > 1): ?>
                    <a href="<?= getPaginationUrl($pagina_atual - 1) ?>">&lsaquo;</a>
                <?php else: ?>
                    <span class="disabled">&lsaquo;</span>
                <?php endif; ?>
                
                <!-- Números das páginas -->
                <?php
                $inicio = max(1, $pagina_atual - 2);
                $fim = min($total_paginas, $pagina_atual + 2);
                
                for ($i = $inicio; $i <= $fim; $i++):
                ?>
                    <?php if ($i == $pagina_atual): ?>
                        <span class="current"><?= $i ?></span>
                    <?php else: ?>
                        <a href="<?= getPaginationUrl($i) ?>"><?= $i ?></a>
                    <?php endif; ?>
                <?php endfor; ?>
                
                <!-- Botão Próximo -->
                <?php if ($pagina_atual < $total_paginas): ?>
                    <a href="<?= getPaginationUrl($pagina_atual + 1) ?>">&rsaquo;</a>
                <?php else: ?>
                    <span class="disabled">&rsaquo;</span>
                <?php endif; ?>
                
                <!-- Botão Última Página -->
                <?php if ($pagina_atual < $total_paginas): ?>
                    <a href="<?= getPaginationUrl($total_paginas) ?>">&raquo;</a>
                <?php else: ?>
                    <span class="disabled">&raquo;</span>
                <?php endif; ?>
            </div>
            <?php endif; ?>
        </div>
    </div>

    <script>
        // Variável global para armazenar clientes selecionados
        let selectedClients = new Set();

        // Função para inicializar os eventos dos checkboxes
        function initCheckboxes() {
            const checkboxes = document.querySelectorAll('.cliente-item');
            const selectAllHeader = document.getElementById('selectAllHeader');
            const selectAllControl = document.getElementById('selectAll');

            // Adicionar evento para cada checkbox individual
            checkboxes.forEach(checkbox => {
                // Remover eventos anteriores para não duplicar
                checkbox.removeEventListener('change', handleCheckboxChange);
                checkbox.addEventListener('change', handleCheckboxChange);
            });

            // Evento para o checkbox "Selecionar todos" do cabeçalho
            if (selectAllHeader) {
                selectAllHeader.removeEventListener('change', handleSelectAllHeader);
                selectAllHeader.addEventListener('change', handleSelectAllHeader);
            }

            // Evento para o checkbox "Selecionar todos" do controle
            if (selectAllControl) {
                selectAllControl.removeEventListener('change', handleSelectAllControl);
                selectAllControl.addEventListener('change', handleSelectAllControl);
            }
        }

        // Handler para mudança em checkbox individual
        function handleCheckboxChange(e) {
            e.stopPropagation();
            if (this.checked) {
                selectedClients.add(this.value);
            } else {
                selectedClients.delete(this.value);
            }
            updateSelection();
        }

        // Handler para "Selecionar todos" do cabeçalho
        function handleSelectAllHeader(e) {
            e.stopPropagation();
            const isChecked = this.checked;
            const checkboxes = document.querySelectorAll('.cliente-item');
            const selectAllControl = document.getElementById('selectAll');
            
            checkboxes.forEach(checkbox => {
                checkbox.checked = isChecked;
                if (isChecked) {
                    selectedClients.add(checkbox.value);
                } else {
                    selectedClients.delete(checkbox.value);
                }
            });
            
            if (selectAllControl) {
                selectAllControl.checked = isChecked;
            }
            updateSelection();
        }

        // Handler para "Selecionar todos" do controle
        function handleSelectAllControl(e) {
            e.stopPropagation();
            const isChecked = this.checked;
            const checkboxes = document.querySelectorAll('.cliente-item');
            const selectAllHeader = document.getElementById('selectAllHeader');
            
            checkboxes.forEach(checkbox => {
                checkbox.checked = isChecked;
                if (isChecked) {
                    selectedClients.add(checkbox.value);
                } else {
                    selectedClients.delete(checkbox.value);
                }
            });
            
            if (selectAllHeader) {
                selectAllHeader.checked = isChecked;
            }
            updateSelection();
        }

        // Função para atualizar contador e controles
        function updateSelection() {
            // Atualizar contador
            const count = selectedClients.size;
            document.getElementById('selectedCount').textContent = `${count} cliente(s) selecionado(s)`;
            
            // Mostrar/ocultar controles de seleção
            const selectionControls = document.getElementById('selectionControls');
            if (count > 0) {
                selectionControls.style.display = 'flex';
            } else {
                selectionControls.style.display = 'none';
            }
            
            // Habilitar/desabilitar botões
            const deleteBtn = document.getElementById('deleteSelected');
            const exportBtn = document.getElementById('exportSelected');
            deleteBtn.disabled = count === 0;
            exportBtn.disabled = count === 0;

            // Atualizar estado do checkbox "Selecionar todos"
            const checkboxes = document.querySelectorAll('.cliente-item');
            const selectAllHeader = document.getElementById('selectAllHeader');
            const selectAllControl = document.getElementById('selectAll');
            
            const allChecked = checkboxes.length > 0 && Array.from(checkboxes).every(cb => cb.checked);
            const anyChecked = Array.from(checkboxes).some(cb => cb.checked);
            
            if (selectAllHeader) {
                selectAllHeader.checked = allChecked;
                selectAllHeader.indeterminate = anyChecked && !allChecked;
            }
            
            if (selectAllControl) {
                selectAllControl.checked = allChecked;
            }
        }

        // Função para alternar visibilidade dos filtros
        function toggleFiltros() {
            const content = document.getElementById('filtrosContent');
            const icon = document.getElementById('filtrosIcon');
            
            if (content.classList.contains('collapsed')) {
                content.classList.remove('collapsed');
                icon.style.transform = 'rotate(0deg)';
            } else {
                content.classList.add('collapsed');
                icon.style.transform = 'rotate(-90deg)';
            }
            
            // Re-inicializar checkboxes quando os filtros são fechados/abertos
            setTimeout(initCheckboxes, 100);
        }

        // Função para carregar etapas do funil via AJAX
        function carregarEtapas(funilId) {
            const etapaSelect = document.getElementById('etapa_funil_select');
            
            // Se não tiver funil selecionado, limpa as etapas
            if (!funilId || funilId === '') {
                etapaSelect.innerHTML = '<option value="">Todas</option>';
                etapaSelect.disabled = false;
                return;
            }
            
            // Mostrar loading
            etapaSelect.innerHTML = '<option value="">Carregando...</option>';
            etapaSelect.disabled = true;
            
            // Fazer requisição GET para carregar as etapas
            fetch(`carregar_etapas.php?funil_id=${funilId}`, {
                method: 'GET',
                headers: {
                    'X-Requested-With': 'XMLHttpRequest'
                }
            })
            .then(response => {
                if (!response.ok) {
                    throw new Error('Erro na rede: ' + response.status);
                }
                return response.json();
            })
            .then(data => {
                etapaSelect.disabled = false;
                
                // Verificar o formato dos dados retornados
                let etapas = [];
                
                if (Array.isArray(data)) {
                    // Se for um array direto
                    etapas = data;
                } else if (data.etapas && Array.isArray(data.etapas)) {
                    // Se for um objeto com propriedade etapas
                    etapas = data.etapas;
                } else if (data.success && data.etapas) {
                    // Se for um objeto com success e etapas
                    etapas = data.etapas;
                } else {
                    console.error('Formato de dados não reconhecido:', data);
                    etapaSelect.innerHTML = '<option value="">Erro no formato dos dados</option>';
                    return;
                }
                
                // Construir as opções do select
                if (etapas.length > 0) {
                    let options = '<option value="">Todas</option>';
                    etapas.forEach(etapa => {
                        options += `<option value="${etapa.id}">${etapa.nome}</option>`;
                    });
                    etapaSelect.innerHTML = options;
                } else {
                    etapaSelect.innerHTML = '<option value="">Nenhuma etapa encontrada</option>';
                }
            })
            .catch(error => {
                console.error('Erro detalhado:', error);
                etapaSelect.disabled = false;
                etapaSelect.innerHTML = '<option value="">Erro ao carregar etapas</option>';
            });
        }

        // Função para carregar etapas iniciais se houver um funil selecionado
        function carregarEtapasIniciais() {
            const funilSelect = document.getElementById('funil_select');
            if (funilSelect && funilSelect.value) {
                // Pequeno atraso para garantir que o DOM está pronto
                setTimeout(() => {
                    carregarEtapas(funilSelect.value);
                }, 100);
            }
        }
        
        // Função para limpar todos os filtros
        function limparFiltros() {
            const form = document.getElementById('formFiltros');
            const inputs = form.querySelectorAll('input, select');
            
            inputs.forEach(input => {
                if (input.type === 'text' || input.type === 'date' || input.tagName === 'SELECT') {
                    input.value = '';
                }
            });
            
            // Submeter o formulário para remover os filtros
            form.submit();
        }

        // Função para exportar todos os clientes
        function exportarTodos() {
            const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
            
            // Mostrar loading
            Swal.fire({
                title: 'Exportando...',
                text: 'Preparando dados para exportação',
                allowOutsideClick: false,
                didOpen: () => {
                    Swal.showLoading();
                }
            });
            
            fetch('exportar_clientes.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
                body: `csrf_token=${csrfToken}&action=export_all`
            })
            .then(response => response.json())
            .then(data => {
                Swal.close();
                if (data.success) {
                    exportarParaExcel(data.clientes, 'todos_clientes');
                } else {
                    Swal.fire({
                        title: 'Erro!',
                        text: data.message,
                        icon: 'error',
                        confirmButtonColor: '#e74c3c'
                    });
                }
            })
            .catch(error => {
                Swal.close();
                console.error('Erro:', error);
                Swal.fire({
                    title: 'Erro!',
                    text: 'Ocorreu um erro ao exportar os clientes.',
                    icon: 'error',
                    confirmButtonColor: '#e74c3c'
                });
            });
        }

        // Função para exportar clientes selecionados
        function exportarSelecionados() {
            const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
            const clientesIds = Array.from(selectedClients);
            
            if (clientesIds.length === 0) {
                Swal.fire({
                    title: 'Atenção!',
                    text: 'Selecione pelo menos um cliente para exportar.',
                    icon: 'warning',
                    confirmButtonColor: '#3498db'
                });
                return;
            }
            
            // Mostrar loading
            Swal.fire({
                title: 'Exportando...',
                text: 'Preparando dados para exportação',
                allowOutsideClick: false,
                didOpen: () => {
                    Swal.showLoading();
                }
            });
            
            const formData = new FormData();
            formData.append('csrf_token', csrfToken);
            formData.append('action', 'export_selected');
            
            clientesIds.forEach((id, index) => {
                formData.append(`ids[${index}]`, id);
            });
            
            fetch('exportar_clientes.php', {
                method: 'POST',
                body: formData
            })
            .then(response => response.json())
            .then(data => {
                Swal.close();
                if (data.success) {
                    exportarParaExcel(data.clientes, 'clientes_selecionados');
                } else {
                    Swal.fire({
                        title: 'Erro!',
                        text: data.message,
                        icon: 'error',
                        confirmButtonColor: '#e74c3c'
                    });
                }
            })
            .catch(error => {
                Swal.close();
                console.error('Erro:', error);
                Swal.fire({
                    title: 'Erro!',
                    text: 'Ocorreu um erro ao exportar os clientes.',
                    icon: 'error',
                    confirmButtonColor: '#e74c3c'
                });
            });
        }

        // Função para exportar cliente individual
        function exportarCliente(id) {
            const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
            
            Swal.fire({
                title: 'Exportando...',
                text: 'Preparando dados para exportação',
                allowOutsideClick: false,
                didOpen: () => {
                    Swal.showLoading();
                }
            });
            
            fetch('exportar_clientes.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
                body: `csrf_token=${csrfToken}&action=export_single&id=${id}`
            })
            .then(response => response.json())
            .then(data => {
                Swal.close();
                if (data.success) {
                    const nomeCliente = data.clientes[0]?.Nome_Cliente?.replace(/[^a-zA-Z0-9]/g, '_') || id;
                    exportarParaExcel(data.clientes, `cliente_${nomeCliente}`);
                } else {
                    Swal.fire({
                        title: 'Erro!',
                        text: data.message,
                        icon: 'error',
                        confirmButtonColor: '#e74c3c'
                    });
                }
            })
            .catch(error => {
                Swal.close();
                console.error('Erro:', error);
                Swal.fire({
                    title: 'Erro!',
                    text: 'Ocorreu um erro ao exportar o cliente.',
                    icon: 'error',
                    confirmButtonColor: '#e74c3c'
                });
            });
        }

        // Função para converter dados para Excel e fazer download
        function exportarParaExcel(clientes, nomeArquivo) {
            try {
                // Mapear os dados para o formato adequado
                const dadosFormatados = clientes.map(cliente => {
                    // Formatar datas
                    const dataCadastro = cliente.Data_Cadastro ? 
                        new Date(cliente.Data_Cadastro).toLocaleDateString('pt-BR') + ' ' + 
                        new Date(cliente.Data_Cadastro).toLocaleTimeString('pt-BR') : '';
                    
                    const deletadoEm = cliente.deletado_em ? 
                        new Date(cliente.deletado_em).toLocaleDateString('pt-BR') + ' ' + 
                        new Date(cliente.deletado_em).toLocaleTimeString('pt-BR') : '';
                    
                    const atualizadoEm = cliente.atualizado_em ? 
                        new Date(cliente.atualizado_em).toLocaleDateString('pt-BR') + ' ' + 
                        new Date(cliente.atualizado_em).toLocaleTimeString('pt-BR') : '';
                    
                    // Retornar todos os campos necessários
                    return {
                        'Nome do Cliente': cliente.Nome_Cliente || '',
                        'CPF/CNPJ': cliente.CPF_CNPJ || '',
                        'Email': cliente.Email || '',
                        'Telefone': cliente.Telefone || '',
                        'Telefone 2': cliente.Telefone2 || '',
                        'Celular': cliente.Celular || '',
                        'Origem': cliente.Origem || '',
                        'Endereço': cliente.Endereco || '',
                        'Cidade': cliente.Cidade || '',
                        'Estado': cliente.Estado || '',
                        'Bairro': cliente.Bairro || '',
                        'Complemento': cliente.Complemento || '',
                        'CEP': cliente.CEP || '',
                        'Instagram': cliente.instagram || '',
                        'LinkedIn': cliente.linkedin || '',
                        'Observações': cliente.Obs || '',
                        'Concluído': cliente.concluida_texto || '',
                        'Data de Cadastro': dataCadastro,
                        'Observações Adicionais': cliente.Observacoes || '',
                        'Data de Exclusão': deletadoEm,
                        'Última Atualização': atualizadoEm,
                        'Usuário Cadastro': cliente.usuario_cadastro_nome || cliente.usuario_cadastro || '',
                        'Região': cliente.regiao || '',
                        'País': cliente.Pais || 'Brasil',
                        'Responsável': cliente.responsavel_nome || cliente.responsavel || '',
                        'Província': cliente.provincia || '',
                        'Quota Arquivos (MB)': cliente.quota_arquivos_mb || '',
                        'Espaço Utilizado (MB)': cliente.espaco_utilizado_mb || '',
                        'Funil': cliente.nome_funil || 'Não definido',
                        'Etapa do Funil': cliente.nome_etapa_funil || 'Não definida',
                        'Produtos': cliente.produtos || '',
                        'Total de Produtos': cliente.total_produtos || 0
                    };
                });

                // Criar workbook e worksheet
                const ws = XLSX.utils.json_to_sheet(dadosFormatados);
                
                // Ajustar largura das colunas
                const wscols = [
                    {wch: 30},  // Nome do Cliente
                    {wch: 20},  // CPF/CNPJ
                    {wch: 30},  // Email
                    {wch: 15},  // Telefone
                    {wch: 15},  // Telefone 2
                    {wch: 15},  // Celular
                    {wch: 15},  // Origem
                    {wch: 40},  // Endereço
                    {wch: 20},  // Cidade
                    {wch: 10},  // Estado
                    {wch: 20},  // Bairro
                    {wch: 20},  // Complemento
                    {wch: 10},  // CEP
                    {wch: 20},  // Instagram
                    {wch: 20},  // LinkedIn
                    {wch: 40},  // Observações
                    {wch: 10},  // Concluído
                    {wch: 20},  // Data de Cadastro
                    {wch: 40},  // Observações Adicionais
                    {wch: 20},  // Data de Exclusão
                    {wch: 20},  // Última Atualização
                    {wch: 20},  // Usuário Cadastro
                    {wch: 15},  // Região
                    {wch: 15},  // País
                    {wch: 20},  // Responsável
                    {wch: 15},  // Província
                    {wch: 15},  // Quota Arquivos (MB)
                    {wch: 15},  // Espaço Utilizado (MB)
                    {wch: 20},  // Funil
                    {wch: 20},  // Etapa do Funil
                    {wch: 40},  // Produtos
                    {wch: 15}   // Total de Produtos
                ];
                ws['!cols'] = wscols;

                const wb = XLSX.utils.book_new();
                XLSX.utils.book_append_sheet(wb, ws, "Clientes");

                // Gerar nome do arquivo com data
                const dataAtual = new Date().toISOString().slice(0, 10);
                const nomeCompleto = `${nomeArquivo}_${dataAtual}.xlsx`;

                // Salvar arquivo
                XLSX.writeFile(wb, nomeCompleto);

                Swal.fire({
                    title: 'Sucesso!',
                    text: `Arquivo ${nomeCompleto} baixado com sucesso.`,
                    icon: 'success',
                    confirmButtonColor: '#2ecc71'
                });

            } catch (error) {
                console.error('Erro ao exportar para Excel:', error);
                Swal.fire({
                    title: 'Erro!',
                    text: 'Erro ao gerar arquivo Excel.',
                    icon: 'error',
                    confirmButtonColor: '#e74c3c'
                });
            }
        }

        // Função para confirmar exclusão múltipla
        function confirmarExclusaoMultipla() {
            const count = selectedClients.size;
            if (count === 0) return;
            
            Swal.fire({
                title: 'Tem certeza?',
                html: `Você está prestes a excluir <strong>${count}</strong> cliente(s) selecionado(s). Esta ação não pode ser desfeita.`,
                icon: 'warning',
                showCancelButton: true,
                confirmButtonColor: '#e74c3c',
                cancelButtonColor: '#7f8c8d',
                confirmButtonText: 'Sim, excluir!',
                cancelButtonText: 'Cancelar'
            }).then((result) => {
                if (result.isConfirmed) {
                    excluirClientesSelecionados();
                }
            });
        }

        // Função para excluir clientes selecionados
        function excluirClientesSelecionados() {
            const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
            const clientesIds = Array.from(selectedClients);
            
            const formData = new FormData();
            formData.append('csrf_token', csrfToken);
            formData.append('action', 'delete_multiple');
            
            clientesIds.forEach((id, index) => {
                formData.append(`ids[${index}]`, id);
            });
            
            fetch('excluir_clientes_multi.php', {
                method: 'POST',
                body: formData
            })
            .then(response => response.json())
            .then(data => {
                if (data.success) {
                    Swal.fire({
                        title: 'Sucesso!',
                        text: data.message,
                        icon: 'success',
                        confirmButtonColor: '#2ecc71'
                    }).then(() => {
                        location.reload();
                    });
                } else {
                    Swal.fire({
                        title: 'Erro!',
                        text: data.message,
                        icon: 'error',
                        confirmButtonColor: '#e74c3c'
                    });
                }
            })
            .catch(error => {
                console.error('Erro:', error);
                Swal.fire({
                    title: 'Erro!',
                    text: 'Ocorreu um erro ao tentar excluir os clientes.',
                    icon: 'error',
                    confirmButtonColor: '#e74c3c'
                });
            });
        }

        // Função para confirmar exclusão individual
        function confirmarExclusao(id, nome) {
            Swal.fire({
                title: 'Tem certeza?',
                html: `Você está prestes a excluir o cliente <strong>${nome}</strong>. Esta ação não pode ser desfeita.`,
                icon: 'warning',
                showCancelButton: true,
                confirmButtonColor: '#e74c3c',
                cancelButtonColor: '#7f8c8d',
                confirmButtonText: 'Sim, excluir!',
                cancelButtonText: 'Cancelar'
            }).then((result) => {
                if (result.isConfirmed) {
                    const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
                    
                    fetch('excluir_cliente.php', {
                        method: 'POST',
                        headers: {
                            'Content-Type': 'application/x-www-form-urlencoded',
                        },
                        body: `id=${id}&csrf_token=${csrfToken}`
                    })
                    .then(response => response.json())
                    .then(data => {
                        if (data.success) {
                            Swal.fire({
                                title: 'Excluído!',
                                text: data.message,
                                icon: 'success',
                                confirmButtonColor: '#2ecc71'
                            }).then(() => {
                                location.reload();
                            });
                        } else {
                            Swal.fire({
                                title: 'Erro!',
                                text: data.message,
                                icon: 'error',
                                confirmButtonColor: '#e74c3c'
                            });
                        }
                    })
                    .catch(error => {
                        Swal.fire({
                            title: 'Erro!',
                            text: 'Ocorreu um erro ao tentar excluir o cliente.',
                            icon: 'error',
                            confirmButtonColor: '#e74c3c'
                        });
                    });
                }
            });
        }

        // Inicializar tudo quando a página carregar
        document.addEventListener('DOMContentLoaded', function() {
            // Inicializar checkboxes
            initCheckboxes();
            
            // Inicializar contador
            updateSelection();
            
            // Carregar etapas iniciais se houver um funil selecionado
            carregarEtapasIniciais();
            
            // Inicializar estado dos filtros
            const filtrosContent = document.getElementById('filtrosContent');
            const filtrosIcon = document.getElementById('filtrosIcon');
            
            <?php if (isset($_POST['aplicar_filtros'])): ?>
                // Se filtros foram aplicados, manter expandido
                filtrosContent.classList.remove('collapsed');
                filtrosIcon.style.transform = 'rotate(0deg)';
            <?php else: ?>
                // Se não, começar recolhido
                filtrosContent.classList.add('collapsed');
                filtrosIcon.style.transform = 'rotate(-90deg)';
            <?php endif; ?>
        });
    </script>
    <?php include 'sino_notificacoes.php'; ?>
</body>
</html>