<?php
// =============================================
// excluirnota.php - Exclusão de Notas Fiscais
// =============================================

// 🔥 PROCESSAR AJAX ANTES DE QUALQUER HTML
$isAjax = isset($_GET['ajax']) || isset($_POST['ajax']);

// =============================================
// SE FOR AJAX, PROCESSAR E SAIR
// =============================================

if ($isAjax) {
    // 🔥 Desligar exibição de erros para não poluir o JSON
    ini_set('display_errors', 0);
    error_reporting(0);
    
    require_once 'includes/funcoes.php';
    $pdo = conectarBanco();
    
    if (!$pdo) {
        header('Content-Type: application/json');
        echo json_encode(['sucesso' => false, 'erro' => 'Erro ao conectar ao banco']);
        exit;
    }
    
    // =============================================
    // EXCLUIR NOTAS SELECIONADAS
    // =============================================
    if (isset($_POST['ajax']) && $_POST['ajax'] == 'excluir_notas' && isset($_POST['refs'])) {
        ob_clean();
        header('Content-Type: application/json');
        
        $refs = json_decode($_POST['refs'], true);
        if (!is_array($refs) || empty($refs)) {
            echo json_encode(['sucesso' => false, 'erro' => 'Nenhuma nota selecionada']);
            exit;
        }
        
        try {
            $pdo->beginTransaction();
            
            $excluidas = 0;
            $erros = 0;
            $resultados = [];
            
            foreach ($refs as $ref) {
                // Verificar se a nota existe
                $stmt = $pdo->prepare("SELECT id, status, ref FROM notas_fiscais WHERE ref = ?");
                $stmt->execute([$ref]);
                $nota = $stmt->fetch(PDO::FETCH_ASSOC);
                
                if (!$nota) {
                    $erros++;
                    $resultados[$ref] = ['sucesso' => false, 'erro' => 'Nota não encontrada'];
                    continue;
                }
                
                // 🔥 PERMITE EXCLUIR QUALQUER NOTA - SEM RESTRIÇÃO DE STATUS
                // Excluir a nota
                $stmt = $pdo->prepare("DELETE FROM notas_fiscais WHERE ref = ?");
                $stmt->execute([$ref]);
                
                if ($stmt->rowCount() > 0) {
                    $excluidas++;
                    $resultados[$ref] = ['sucesso' => true, 'mensagem' => 'Excluída com sucesso'];
                    
                    // Registrar log de exclusão
                    try {
                        $checkTable = $pdo->query("SHOW TABLES LIKE 'logs_auditoria'");
                        if ($checkTable->rowCount() > 0) {
                            $logStmt = $pdo->prepare("
                                INSERT INTO logs_auditoria 
                                (acao, detalhes, ip, criado_em)
                                VALUES (?, ?, ?, NOW())
                            ");
                            $logStmt->execute([
                                'exclusao_nfse',
                                json_encode(['ref' => $ref, 'status_original' => $nota['status']]),
                                $_SERVER['REMOTE_ADDR']
                            ]);
                        }
                    } catch (Exception $e) {
                        // Log não crítico, continua
                    }
                } else {
                    $erros++;
                    $resultados[$ref] = ['sucesso' => false, 'erro' => 'Erro ao excluir'];
                }
            }
            
            $pdo->commit();
            
            echo json_encode([
                'sucesso' => true,
                'excluidas' => $excluidas,
                'erros' => $erros,
                'total' => count($refs),
                'resultados' => $resultados,
                'mensagem' => $excluidas > 0 ? "{$excluidas} nota(s) excluída(s) com sucesso!" : "Nenhuma nota foi excluída."
            ]);
            
        } catch (Exception $e) {
            $pdo->rollBack();
            echo json_encode(['sucesso' => false, 'erro' => 'Erro ao excluir notas: ' . $e->getMessage()]);
        }
        exit;
    }
    
    // =============================================
    // BUSCAR TODAS AS NOTAS
    // =============================================
    if (isset($_GET['ajax']) && $_GET['ajax'] == 'buscar_notas_para_excluir') {
        ob_clean();
        header('Content-Type: application/json');
        
        try {
            // 🔥 BUSCAR TODAS AS NOTAS (sem restrição de status)
            $where = ["1=1"];
            $params = [];
            
            if (isset($_GET['busca']) && !empty($_GET['busca'])) {
                $busca = '%' . $_GET['busca'] . '%';
                $where[] = "(n.ref LIKE ? OR n.numero_nfse LIKE ? OR t.razao_social LIKE ? OR e.razao_social LIKE ?)";
                $params[] = $busca;
                $params[] = $busca;
                $params[] = $busca;
                $params[] = $busca;
            }
            
            if (isset($_GET['data_inicio']) && !empty($_GET['data_inicio'])) {
                $where[] = "DATE(n.data_emissao) >= ?";
                $params[] = $_GET['data_inicio'];
            }
            
            if (isset($_GET['data_fim']) && !empty($_GET['data_fim'])) {
                $where[] = "DATE(n.data_emissao) <= ?";
                $params[] = $_GET['data_fim'];
            }
            
            if (isset($_GET['empresa_id']) && !empty($_GET['empresa_id'])) {
                $where[] = "n.empresa_id = ?";
                $params[] = $_GET['empresa_id'];
            }
            
            if (isset($_GET['status']) && !empty($_GET['status'])) {
                if ($_GET['status'] == 'erro') {
                    $where[] = "n.status IN ('erro_validacao', 'erro_autorizacao', 'rejeitado')";
                } else {
                    $where[] = "n.status = ?";
                    $params[] = $_GET['status'];
                }
            }
            
            $sql = "
                SELECT 
                    n.id,
                    n.ref,
                    n.numero_nfse,
                    n.valor_servico,
                    n.data_emissao,
                    n.criado_em,
                    n.status,
                    n.justificativa_cancelamento,
                    e.razao_social as emitente_nome,
                    e.cnpj as emitente_cnpj,
                    t.razao_social as tomador_nome,
                    t.cnpj as tomador_cnpj,
                    t.cpf as tomador_cpf,
                    emp.nome as empresa_nome,
                    emp.ambiente
                FROM notas_fiscais n
                LEFT JOIN emitentes e ON n.emitente_id = e.id
                LEFT JOIN tomadores t ON n.tomador_id = t.id
                INNER JOIN empresas emp ON n.empresa_id = emp.id
                WHERE " . implode(" AND ", $where) . "
                ORDER BY n.criado_em DESC
            ";
            
            $stmt = $pdo->prepare($sql);
            $stmt->execute($params);
            $notas = $stmt->fetchAll(PDO::FETCH_ASSOC);
            
            echo json_encode([
                'sucesso' => true,
                'total' => count($notas),
                'notas' => $notas
            ]);
            
        } catch (Exception $e) {
            echo json_encode(['sucesso' => false, 'erro' => $e->getMessage()]);
        }
        exit;
    }
    
    // Se chegou aqui, é um AJAX desconhecido
    header('Content-Type: application/json');
    echo json_encode(['sucesso' => false, 'erro' => 'Requisição inválida']);
    exit;
}

// =============================================
// SE NÃO FOR AJAX, CONTINUA O HTML NORMAL
// =============================================

// CONFIGURAÇÃO DE ERROS PARA O HTML
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

require_once 'includes/funcoes.php';
include 'includes/header.php';

$baseUrl = rtrim(dirname($_SERVER['SCRIPT_NAME']), '/');
define('BASE_URL', $baseUrl);

$pdo = conectarBanco();
if (!$pdo) {
    die('Erro ao conectar ao banco de dados');
}

// Buscar empresas para filtro
$empresas = $pdo->query("SELECT id, nome FROM empresas WHERE ativo = 1 ORDER BY nome")->fetchAll(PDO::FETCH_ASSOC);

// Buscar contagem total de notas
$totalNotas = $pdo->query("SELECT COUNT(*) as total FROM notas_fiscais")->fetch(PDO::FETCH_ASSOC)['total'] ?? 0;

// Buscar contagem por status
$stats = $pdo->query("
    SELECT status, COUNT(*) as total 
    FROM notas_fiscais 
    GROUP BY status
")->fetchAll(PDO::FETCH_ASSOC);

$statsMap = [];
foreach ($stats as $s) {
    $statsMap[$s['status']] = $s['total'];
}
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Excluir Notas Fiscais - Emissor Nacional</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css" rel="stylesheet">
    <link href="https://cdn.datatables.net/1.11.5/css/dataTables.bootstrap5.min.css" rel="stylesheet">
    <style>
        .card-shadow { box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
        
        .status-badge { 
            padding: 4px 10px; 
            border-radius: 15px; 
            font-size: 11px; 
            font-weight: 600; 
            display: inline-block;
            text-transform: uppercase;
            letter-spacing: 0.3px;
        }
        .status-rascunho { background-color: #e2e3e5; color: #383d41; }
        .status-processando_autorizacao { background-color: #fff3cd; color: #856404; animation: pulse 2s infinite; }
        .status-autorizado { background-color: #d4edda; color: #155724; }
        .status-aprovado { background-color: #d4edda; color: #155724; }
        .status-rejeitado { background-color: #f8d7da; color: #721c24; }
        .status-cancelado { background-color: #e2e3e5; color: #383d41; }
        .status-erro_validacao { background-color: #f8d7da; color: #721c24; }
        .status-erro_autorizacao { background-color: #f8d7da; color: #721c24; }
        
        @keyframes pulse {
            0% { opacity: 1; }
            50% { opacity: 0.6; }
            100% { opacity: 1; }
        }
        
        .btn-excluir-selecionados {
            background-color: #dc3545;
            color: white;
            border: none;
            padding: 8px 20px;
            border-radius: 5px;
            font-weight: 600;
            transition: all 0.3s;
        }
        .btn-excluir-selecionados:hover {
            background-color: #c82333;
            color: white;
            transform: scale(1.02);
        }
        .btn-excluir-selecionados:disabled {
            background-color: #6c757d;
            cursor: not-allowed;
            transform: none;
        }
        
        .btn-selecionar-todos {
            background-color: #6c757d;
            color: white;
            border: none;
            padding: 5px 12px;
            border-radius: 4px;
            font-size: 13px;
            transition: all 0.2s;
        }
        .btn-selecionar-todos:hover {
            background-color: #5a6268;
            color: white;
        }
        
        .btn-deselecionar-todos {
            background-color: #6c757d;
            color: white;
            border: none;
            padding: 5px 12px;
            border-radius: 4px;
            font-size: 13px;
            transition: all 0.2s;
        }
        .btn-deselecionar-todos:hover {
            background-color: #5a6268;
            color: white;
        }
        
        .filtros-box {
            background: #f8f9fa;
            border: 1px solid #dee2e6;
            border-radius: 8px;
            padding: 15px;
            margin-bottom: 20px;
        }
        .filtros-box .form-label { font-size: 12px; font-weight: 600; color: #555; }
        .filtros-box .form-control,
        .filtros-box .form-select { font-size: 13px; }
        
        .resumo-stats {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
            gap: 8px;
            margin-bottom: 15px;
        }
        .stat-card {
            background: #f8f9fa;
            padding: 8px 12px;
            border-radius: 8px;
            text-align: center;
            transition: transform 0.2s;
            cursor: pointer;
            border: 2px solid transparent;
        }
        .stat-card:hover {
            transform: translateY(-3px);
            box-shadow: 0 4px 12px rgba(0,0,0,0.1);
        }
        .stat-card.active {
            border-color: #dc3545;
            background: #f8d7da;
        }
        .stat-card .number { font-size: 20px; font-weight: bold; }
        .stat-card .label { font-size: 10px; color: #666; text-transform: uppercase; }
        .stat-card.total .number { color: #007bff; }
        .stat-card.rascunho .number { color: #6c757d; }
        .stat-card.autorizado .number { color: #28a745; }
        .stat-card.erro .number { color: #dc3545; }
        .stat-card.cancelado .number { color: #6c757d; }
        .stat-card.processando .number { color: #ffc107; }
        
        .table-notas td { vertical-align: middle; font-size: 13px; }
        .table-notas th { font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; }
        .ref-code { font-size: 12px; background: #f8f9fa; padding: 2px 8px; border-radius: 4px; font-family: monospace; }
        
        .loading-overlay {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(0,0,0,0.7);
            z-index: 9999;
            display: none;
            justify-content: center;
            align-items: center;
            flex-direction: column;
        }
        .loading-spinner {
            width: 50px;
            height: 50px;
            border: 5px solid #f3f3f3;
            border-top: 5px solid #3498db;
            border-radius: 50%;
            animation: spin 1s linear infinite;
        }
        @keyframes spin {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }
        
        .toast-container { position: fixed; top: 20px; right: 20px; z-index: 9999; }
        
        .checkbox-column { width: 40px; text-align: center; }
        .checkbox-column input[type="checkbox"] { 
            width: 18px; 
            height: 18px; 
            cursor: pointer;
        }
        
        .modal-exclusao .modal-header {
            background-color: #dc3545;
            color: white;
        }
        .modal-exclusao .modal-header .btn-close {
            filter: brightness(0) invert(1);
        }
        .modal-exclusao .modal-footer .btn-confirmar-exclusao {
            background-color: #dc3545;
            color: white;
        }
        .modal-exclusao .modal-footer .btn-confirmar-exclusao:hover {
            background-color: #c82333;
        }
        .modal-exclusao .modal-footer .btn-cancelar {
            background-color: #6c757d;
            color: white;
        }
        .modal-exclusao .modal-footer .btn-cancelar:hover {
            background-color: #5a6268;
        }
        .modal-exclusao .alerta-exclusao {
            background-color: #f8d7da;
            border: 1px solid #dc3545;
            border-radius: 6px;
            padding: 10px 14px;
            margin: 10px 0;
            font-size: 13px;
            color: #721c24;
        }
        .modal-exclusao .alerta-exclusao i { margin-right: 8px; }
        .modal-exclusao .lista-notas {
            max-height: 250px;
            overflow-y: auto;
            background: #f8f9fa;
            border-radius: 6px;
            padding: 10px;
        }
        .modal-exclusao .lista-notas .item {
            padding: 4px 0;
            border-bottom: 1px dashed #dee2e6;
            font-size: 13px;
        }
        .modal-exclusao .lista-notas .item:last-child {
            border-bottom: none;
        }
        .modal-exclusao .lista-notas .status-label {
            font-size: 9px;
            padding: 1px 6px;
            border-radius: 10px;
        }
        
        .selecionados-count {
            font-weight: 600;
            color: #dc3545;
        }
        
        .ambiente-badge { font-size: 10px; padding: 2px 8px; border-radius: 12px; }
        
        .btn-refresh {
            background-color: transparent;
            border: 1px solid #dee2e6;
            border-radius: 4px;
            padding: 5px 10px;
            transition: all 0.2s;
        }
        .btn-refresh:hover {
            background-color: #f8f9fa;
        }
        
        .btn-voltar {
            background-color: #6c757d;
            color: white;
            border: none;
            padding: 8px 16px;
            border-radius: 5px;
            transition: all 0.2s;
            text-decoration: none;
        }
        .btn-voltar:hover {
            background-color: #5a6268;
            color: white;
            text-decoration: none;
        }
        
        .info-box {
            background: #e7f3ff;
            border: 1px solid #b6d4fe;
            border-radius: 6px;
            padding: 8px 12px;
            font-size: 12px;
            color: #0d6efd;
            margin-bottom: 10px;
        }
        .info-box i { margin-right: 6px; }
        
        .badge-status {
            font-size: 9px;
            padding: 2px 6px;
            border-radius: 10px;
        }
        
        .table-danger-row td {
            background-color: #f8d7da !important;
        }
        
        .selecionado-todos {
            background-color: #fff3cd !important;
        }
        .selecionado-todos td {
            background-color: #fff3cd !important;
        }
    </style>
</head>
<body>

<!-- LOADING OVERLAY -->
<div class="loading-overlay" id="loadingOverlay">
    <div class="loading-spinner"></div>
    <div class="text-white mt-3" id="loadingMensagem">Processando...</div>
</div>

<!-- TOAST CONTAINER -->
<div class="toast-container" id="toastContainer"></div>

<!-- MODAL DE CONFIRMAÇÃO DE EXCLUSÃO -->
<div class="modal fade modal-exclusao" id="modalConfirmarExclusao" tabindex="-1" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered modal-lg">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title"><i class="bi bi-exclamation-triangle"></i> Confirmar Exclusão</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body">
                <div class="alerta-exclusao">
                    <i class="bi bi-exclamation-triangle-fill"></i>
                    <strong>Atenção:</strong> Esta ação é <strong>irreversível</strong> e excluirá permanentemente as notas fiscais selecionadas.
                    <br><small>Todas as notas selecionadas serão excluídas, independente do status.</small>
                </div>
                
                <p><strong>Notas selecionadas para exclusão:</strong></p>
                <div class="lista-notas" id="listaNotasExcluir">
                    <span class="text-muted">Nenhuma nota selecionada</span>
                </div>
                
                <div class="mt-3">
                    <span class="badge bg-danger" id="totalSelecionadosModal">0</span>
                    <span class="text-muted"> nota(s) serão excluídas permanentemente</span>
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-cancelar" data-bs-dismiss="modal">
                    <i class="bi bi-x-circle"></i> Cancelar
                </button>
                <button type="button" class="btn btn-confirmar-exclusao" id="btnConfirmarExclusao">
                    <i class="bi bi-check-circle"></i> Confirmar Exclusão
                </button>
            </div>
        </div>
    </div>
</div>

<div class="container-fluid mt-3">
    <!-- CABEÇALHO -->
    <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
        <div>
            <h1><i class="bi bi-trash text-danger"></i> Excluir Notas Fiscais</h1>
            <span class="badge bg-warning text-dark">Emissor Nacional</span>
            <span class="badge bg-secondary ms-2">
                <i class="bi bi-file-earmark"></i> Total: <span id="totalNotasBadge"><?php echo $totalNotas; ?></span>
            </span>
            <span class="badge bg-danger ms-2">
                <i class="bi bi-trash"></i> Pode excluir qualquer nota
            </span>
        </div>
        <div>
            <a href="<?php echo BASE_URL; ?>/consultar_notas.php" class="btn btn-voltar">
                <i class="bi bi-arrow-left"></i> Voltar
            </a>
            <button class="btn btn-refresh ms-2" onclick="recarregarLista()">
                <i class="bi bi-arrow-clockwise"></i>
            </button>
        </div>
    </div>

    <!-- INFO -->
    <div class="info-box">
        <i class="bi bi-info-circle"></i>
        <strong>Exclusão de notas:</strong> Selecione <strong>QUALQUER</strong> nota fiscal para excluir permanentemente. 
        <span class="badge bg-danger ms-2">⚠️ Irreversível</span>
        <span class="badge bg-warning text-dark ms-2">Todas as notas podem ser excluídas</span>
    </div>

    <!-- RESUMO ESTATÍSTICAS -->
    <div class="resumo-stats">
        <div class="stat-card total <?php echo (!isset($_GET['status']) || $_GET['status'] == '') ? 'active' : ''; ?>" onclick="filtrarPorStatus('')">
            <div class="number"><?php echo $totalNotas; ?></div>
            <div class="label">Total</div>
        </div>
        <?php if (isset($statsMap['rascunho']) && $statsMap['rascunho'] > 0): ?>
        <div class="stat-card rascunho <?php echo (isset($_GET['status']) && $_GET['status'] == 'rascunho') ? 'active' : ''; ?>" onclick="filtrarPorStatus('rascunho')">
            <div class="number"><?php echo $statsMap['rascunho']; ?></div>
            <div class="label">Rascunhos</div>
        </div>
        <?php endif; ?>
        <?php if (isset($statsMap['autorizado']) && $statsMap['autorizado'] > 0): ?>
        <div class="stat-card autorizado <?php echo (isset($_GET['status']) && $_GET['status'] == 'autorizado') ? 'active' : ''; ?>" onclick="filtrarPorStatus('autorizado')">
            <div class="number"><?php echo $statsMap['autorizado']; ?></div>
            <div class="label">Autorizados</div>
        </div>
        <?php endif; ?>
        <?php if (isset($statsMap['aprovado']) && $statsMap['aprovado'] > 0): ?>
        <div class="stat-card autorizado <?php echo (isset($_GET['status']) && $_GET['status'] == 'aprovado') ? 'active' : ''; ?>" onclick="filtrarPorStatus('aprovado')">
            <div class="number"><?php echo $statsMap['aprovado']; ?></div>
            <div class="label">Aprovados</div>
        </div>
        <?php endif; ?>
        <?php 
        $totalErro = ($statsMap['erro_validacao'] ?? 0) + ($statsMap['erro_autorizacao'] ?? 0) + ($statsMap['rejeitado'] ?? 0);
        if ($totalErro > 0): 
        ?>
        <div class="stat-card erro <?php echo (isset($_GET['status']) && $_GET['status'] == 'erro') ? 'active' : ''; ?>" onclick="filtrarPorStatus('erro')">
            <div class="number"><?php echo $totalErro; ?></div>
            <div class="label">Erros/Rejeitados</div>
        </div>
        <?php endif; ?>
        <?php if (isset($statsMap['cancelado']) && $statsMap['cancelado'] > 0): ?>
        <div class="stat-card cancelado <?php echo (isset($_GET['status']) && $_GET['status'] == 'cancelado') ? 'active' : ''; ?>" onclick="filtrarPorStatus('cancelado')">
            <div class="number"><?php echo $statsMap['cancelado']; ?></div>
            <div class="label">Cancelados</div>
        </div>
        <?php endif; ?>
        <?php if (isset($statsMap['processando_autorizacao']) && $statsMap['processando_autorizacao'] > 0): ?>
        <div class="stat-card processando <?php echo (isset($_GET['status']) && $_GET['status'] == 'processando_autorizacao') ? 'active' : ''; ?>" onclick="filtrarPorStatus('processando_autorizacao')">
            <div class="number"><?php echo $statsMap['processando_autorizacao']; ?></div>
            <div class="label">Processando</div>
        </div>
        <?php endif; ?>
    </div>

    <!-- FILTROS -->
    <div class="filtros-box">
        <form id="formFiltros" class="row g-3" onsubmit="return false;">
            <div class="col-md-3">
                <label class="form-label">🔍 Buscar</label>
                <input type="text" class="form-control" id="busca" placeholder="Ref, NF, Tomador ou Emitente..." 
                       value="<?php echo htmlspecialchars($_GET['busca'] ?? ''); ?>">
            </div>
            <div class="col-md-2">
                <label class="form-label">📅 Data Início</label>
                <input type="date" class="form-control" id="data_inicio" value="<?php echo htmlspecialchars($_GET['data_inicio'] ?? ''); ?>">
            </div>
            <div class="col-md-2">
                <label class="form-label">📅 Data Fim</label>
                <input type="date" class="form-control" id="data_fim" value="<?php echo htmlspecialchars($_GET['data_fim'] ?? ''); ?>">
            </div>
            <div class="col-md-3">
                <label class="form-label">🏭 Empresa</label>
                <select class="form-select" id="empresa_id">
                    <option value="">Todas</option>
                    <?php foreach ($empresas as $emp): ?>
                        <option value="<?php echo $emp['id']; ?>">
                            <?php echo htmlspecialchars($emp['nome']); ?>
                        </option>
                    <?php endforeach; ?>
                </select>
            </div>
            <div class="col-md-2 d-flex align-items-end gap-2">
                <button type="button" class="btn btn-primary" onclick="carregarLista()">
                    <i class="bi bi-search"></i> Filtrar
                </button>
                <button type="button" class="btn btn-secondary" onclick="limparFiltros()">
                    <i class="bi bi-eraser"></i> Limpar
                </button>
            </div>
        </form>
    </div>

    <!-- AÇÕES EM MASSA -->
    <div class="d-flex justify-content-between align-items-center mb-3 flex-wrap gap-2">
        <div>
            <button class="btn-selecionar-todos me-2" onclick="selecionarTodos()">
                <i class="bi bi-check-all"></i> Selecionar Todos
            </button>
            <button class="btn-deselecionar-todos" onclick="deselecionarTodos()">
                <i class="bi bi-x-circle"></i> Deselecionar Todos
            </button>
            <span class="ms-3 text-muted">
                <span id="selecionadosInfo">0</span> selecionados de <span id="totalInfo">0</span>
            </span>
        </div>
        <div>
            <button class="btn-excluir-selecionados" id="btnExcluirSelecionados" disabled onclick="abrirModalExclusao()">
                <i class="bi bi-trash"></i> Excluir Selecionados
                <span class="badge bg-light text-dark ms-1" id="btnSelecionadosCount">0</span>
            </button>
        </div>
    </div>

    <!-- TABELA DE NOTAS -->
    <div class="card card-shadow">
        <div class="card-header bg-danger text-white d-flex justify-content-between align-items-center">
            <div>
                <strong><i class="bi bi-list-ul"></i> Todas as Notas Fiscais</strong>
                <span class="badge bg-light text-dark ms-2" id="totalRegistros">Carregando...</span>
            </div>
            <div>
                <button class="btn btn-light btn-sm" onclick="carregarLista()">
                    <i class="bi bi-arrow-repeat"></i> Atualizar
                </button>
            </div>
        </div>
        <div class="card-body">
            <div class="table-responsive">
                <table id="tabelaNotas" class="table table-notas table-striped table-hover">
                    <thead>
                        <tr>
                            <th class="checkbox-column">
                                <input type="checkbox" id="checkboxSelecionarTodos" onchange="toggleTodosCheckboxes(this)">
                            </th>
                            <th>Empresa</th>
                            <th>Data</th>
                            <th>Ref</th>
                            <th>Tomador</th>
                            <th>Valor</th>
                            <th>Status</th>
                        </tr>
                    </thead>
                    <tbody id="corpoTabela">
                        <tr>
                            <td colspan="7" class="text-center text-muted py-4">
                                <i class="bi bi-inbox fs-1"></i><br>
                                Nenhuma nota encontrada
                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>

<!-- SCRIPTS -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>

<script>
// =============================================
// VARIÁVEIS GLOBAIS
// =============================================
var notasSelecionadas = {};
var notasCarregadas = [];
var atualizando = false;
var statusFiltroAtual = '<?php echo isset($_GET['status']) ? $_GET['status'] : ''; ?>';

// =============================================
// FUNÇÕES DE FORMATAÇÃO
// =============================================

function formatarCnpjJS(cnpj) {
    if (!cnpj) return '';
    cnpj = cnpj.replace(/\D/g, '');
    if (cnpj.length === 14) {
        return cnpj.substring(0, 2) + '.' + cnpj.substring(2, 5) + '.' + 
               cnpj.substring(5, 8) + '/' + cnpj.substring(8, 12) + '-' + cnpj.substring(12, 14);
    }
    return cnpj;
}

function formatarCpfJS(cpf) {
    if (!cpf) return '';
    cpf = cpf.replace(/\D/g, '');
    if (cpf.length === 11) {
        return cpf.substring(0, 3) + '.' + cpf.substring(3, 6) + '.' + 
               cpf.substring(6, 9) + '-' + cpf.substring(9, 11);
    }
    return cpf;
}

function getStatusBadgeClass(status) {
    var map = {
        'rascunho': 'status-rascunho',
        'processando_autorizacao': 'status-processando_autorizacao',
        'autorizado': 'status-autorizado',
        'aprovado': 'status-aprovado',
        'rejeitado': 'status-rejeitado',
        'cancelado': 'status-cancelado',
        'erro_validacao': 'status-erro_validacao',
        'erro_autorizacao': 'status-erro_autorizacao'
    };
    return map[status] || 'status-rascunho';
}

function getStatusLabel(status) {
    var map = {
        'rascunho': 'RASCUNHO',
        'processando_autorizacao': 'PROCESSANDO',
        'autorizado': 'AUTORIZADO',
        'aprovado': 'APROVADO',
        'rejeitado': 'REJEITADO',
        'cancelado': 'CANCELADO',
        'erro_validacao': 'ERRO VALIDAÇÃO',
        'erro_autorizacao': 'ERRO AUTORIZAÇÃO'
    };
    return map[status] || status.toUpperCase();
}

// =============================================
// FUNÇÕES PRINCIPAIS
// =============================================

function carregarLista() {
    if (atualizando) return;
    
    var busca = $('#busca').val();
    var dataInicio = $('#data_inicio').val();
    var dataFim = $('#data_fim').val();
    var empresaId = $('#empresa_id').val();
    var status = statusFiltroAtual;
    
    atualizando = true;
    $('#loadingOverlay').show();
    $('#loadingMensagem').text('Carregando notas...');
    
    $.ajax({
        url: window.location.pathname,
        method: 'GET',
        data: {
            ajax: 'buscar_notas_para_excluir',
            busca: busca,
            data_inicio: dataInicio,
            data_fim: dataFim,
            empresa_id: empresaId,
            status: status
        },
        dataType: 'json',
        timeout: 30000,
        success: function(response) {
            atualizando = false;
            $('#loadingOverlay').hide();
            
            if (response.sucesso) {
                notasCarregadas = response.notas || [];
                renderizarTabela(notasCarregadas);
                
                var total = response.total;
                
                $('#totalRegistros').text(total + ' registros');
                $('#totalInfo').text(total);
                $('#totalNotasBadge').text(total);
                
                // Limpar seleções
                notasSelecionadas = {};
                atualizarSelecionados();
                
                if (total === 0) {
                    $('#corpoTabela').html(`
                        <tr>
                            <td colspan="7" class="text-center text-muted py-4">
                                <i class="bi bi-inbox fs-1"></i><br>
                                Nenhuma nota encontrada com os filtros aplicados
                            </td>
                        </tr>
                    `);
                }
                
                mostrarToast('✅ ' + total + ' nota(s) carregada(s)', 'success');
            } else {
                mostrarToast('❌ ' + (response.erro || 'Erro ao carregar lista'), 'danger');
            }
        },
        error: function(xhr, status, error) {
            atualizando = false;
            $('#loadingOverlay').hide();
            console.error('Erro:', error);
            mostrarToast('❌ Erro ao carregar: ' + error, 'danger');
        }
    });
}

function renderizarTabela(notas) {
    var html = '';
    
    if (!notas || notas.length === 0) {
        $('#corpoTabela').html(`
            <tr>
                <td colspan="7" class="text-center text-muted py-4">
                    <i class="bi bi-inbox fs-1"></i><br>
                    Nenhuma nota encontrada
                </td>
            </tr>
        `);
        return;
    }
    
    notas.forEach(function(nota) {
        var isChecked = notasSelecionadas[nota.ref] || false;
        var dataFormatada = nota.data_emissao ? new Date(nota.data_emissao).toLocaleString('pt-BR') : (nota.criado_em ? new Date(nota.criado_em).toLocaleString('pt-BR') : '-');
        var valorFormatado = 'R$ ' + (parseFloat(nota.valor_servico || 0).toFixed(2).replace('.', ','));
        var tomadorDoc = nota.tomador_cnpj ? formatarCnpjJS(nota.tomador_cnpj) : (nota.tomador_cpf ? formatarCpfJS(nota.tomador_cpf) : '');
        var statusClass = getStatusBadgeClass(nota.status);
        var statusLabel = getStatusLabel(nota.status);
        
        html += `
            <tr id="nota_${nota.ref}" ${isChecked ? 'class="selecionado-todos"' : ''}>
                <td class="checkbox-column">
                    <input type="checkbox" class="checkbox-nota" data-ref="${nota.ref}" 
                           ${isChecked ? 'checked' : ''}
                           onchange="toggleNotaSelecionada('${nota.ref}')">
                </td>
                <td>
                    <strong>${escapaHtml(nota.empresa_nome || '-')}</strong>
                    <br><span class="ambiente-badge badge ${nota.ambiente == 'producao' ? 'bg-success' : 'bg-warning'}">
                        ${(nota.ambiente || 'homologacao').toUpperCase()}
                    </span>
                </td>
                <td>${dataFormatada}</td>
                <td>
                    <code class="ref-code">${escapaHtml(nota.ref)}</code>
                    ${nota.numero_nfse ? '<br><small class="text-muted">NF: ' + escapaHtml(nota.numero_nfse) + '</small>' : ''}
                </td>
                <td>
                    <strong>${escapaHtml(nota.tomador_nome || '-')}</strong>
                    ${tomadorDoc ? '<br><small class="text-muted">' + tomadorDoc + '</small>' : ''}
                </td>
                <td><strong>${valorFormatado}</strong></td>
                <td>
                    <span class="status-badge ${statusClass}">${statusLabel}</span>
                    ${nota.justificativa_cancelamento ? '<br><small class="text-muted" title="' + escapaHtml(nota.justificativa_cancelamento) + '">' + escapaHtml(nota.justificativa_cancelamento.substring(0, 30)) + '...</small>' : ''}
                </td>
            </tr>
        `;
    });
    
    $('#corpoTabela').html(html);
}

function escapaHtml(texto) {
    if (!texto) return '';
    var div = document.createElement('div');
    div.textContent = texto;
    return div.innerHTML;
}

function filtrarPorStatus(status) {
    statusFiltroAtual = status;
    
    // Atualizar URL sem recarregar
    var url = new URL(window.location.href);
    if (status) {
        url.searchParams.set('status', status);
    } else {
        url.searchParams.delete('status');
    }
    window.history.pushState({}, '', url.toString());
    
    // Atualizar classes ativas nos stats
    $('.stat-card').removeClass('active');
    if (status) {
        $('.stat-card.' + status).addClass('active');
    } else {
        $('.stat-card.total').addClass('active');
    }
    
    carregarLista();
}

// =============================================
// FUNÇÕES DE SELEÇÃO
// =============================================

function toggleNotaSelecionada(ref) {
    if (notasSelecionadas[ref]) {
        delete notasSelecionadas[ref];
        $('#nota_' + ref).removeClass('selecionado-todos');
    } else {
        notasSelecionadas[ref] = true;
        $('#nota_' + ref).addClass('selecionado-todos');
    }
    atualizarSelecionados();
}

function toggleTodosCheckboxes(masterCheckbox) {
    var isChecked = $(masterCheckbox).prop('checked');
    $('.checkbox-nota').each(function() {
        $(this).prop('checked', isChecked);
        var ref = $(this).data('ref');
        if (isChecked) {
            notasSelecionadas[ref] = true;
            $('#nota_' + ref).addClass('selecionado-todos');
        } else {
            delete notasSelecionadas[ref];
            $('#nota_' + ref).removeClass('selecionado-todos');
        }
    });
    atualizarSelecionados();
}

function selecionarTodos() {
    $('.checkbox-nota').each(function() {
        $(this).prop('checked', true);
        var ref = $(this).data('ref');
        notasSelecionadas[ref] = true;
        $('#nota_' + ref).addClass('selecionado-todos');
    });
    $('#checkboxSelecionarTodos').prop('checked', true);
    atualizarSelecionados();
}

function deselecionarTodos() {
    $('.checkbox-nota').each(function() {
        $(this).prop('checked', false);
        var ref = $(this).data('ref');
        delete notasSelecionadas[ref];
        $('#nota_' + ref).removeClass('selecionado-todos');
    });
    $('#checkboxSelecionarTodos').prop('checked', false);
    atualizarSelecionados();
}

function atualizarSelecionados() {
    var count = Object.keys(notasSelecionadas).length;
    var total = notasCarregadas.length;
    
    $('#selecionadosCount').text(count);
    $('#selecionadosInfo').text(count);
    $('#btnSelecionadosCount').text(count);
    $('#btnExcluirSelecionados').prop('disabled', count === 0);
    
    // Atualizar checkbox master
    if (total > 0 && count === total) {
        $('#checkboxSelecionarTodos').prop('checked', true);
    } else {
        $('#checkboxSelecionarTodos').prop('checked', false);
    }
}

// =============================================
// MODAL DE EXCLUSÃO
// =============================================

function abrirModalExclusao() {
    var refs = Object.keys(notasSelecionadas);
    if (refs.length === 0) {
        mostrarToast('⚠️ Nenhuma nota selecionada', 'warning');
        return;
    }
    
    var html = '';
    refs.forEach(function(ref) {
        var nota = notasCarregadas.find(function(n) { return n.ref === ref; });
        if (nota) {
            var valor = 'R$ ' + (parseFloat(nota.valor_servico || 0).toFixed(2).replace('.', ','));
            var statusLabel = getStatusLabel(nota.status);
            var statusClass = getStatusBadgeClass(nota.status);
            html += `
                <div class="item">
                    <code class="ref-code">${escapaHtml(ref)}</code>
                    - ${escapaHtml(nota.tomador_nome || 'Tomador')} 
                    <span class="text-muted">(${valor})</span>
                    <span class="status-badge ${statusClass}" style="font-size:9px;padding:1px 6px;">${statusLabel}</span>
                </div>
            `;
        } else {
            html += `<div class="item text-danger">${escapaHtml(ref)} - <i>Nota não encontrada</i></div>`;
        }
    });
    
    $('#listaNotasExcluir').html(html || '<span class="text-muted">Nenhuma nota selecionada</span>');
    $('#totalSelecionadosModal').text(refs.length);
    
    var modal = new bootstrap.Modal(document.getElementById('modalConfirmarExclusao'));
    modal.show();
}

// =============================================
// EXECUTAR EXCLUSÃO
// =============================================

$('#btnConfirmarExclusao').on('click', function() {
    var refs = Object.keys(notasSelecionadas);
    if (refs.length === 0) {
        mostrarToast('⚠️ Nenhuma nota selecionada', 'warning');
        return;
    }
    
    var modal = bootstrap.Modal.getInstance(document.getElementById('modalConfirmarExclusao'));
    if (modal) modal.hide();
    
    var btn = $('#btnConfirmarExclusao');
    btn.prop('disabled', true).html('<i class="bi bi-hourglass-split"></i> Excluindo...');
    
    $('#loadingOverlay').show();
    $('#loadingMensagem').text('Excluindo ' + refs.length + ' nota(s)...');
    mostrarToast('🔄 Excluindo ' + refs.length + ' nota(s)...', 'info');
    
    $.ajax({
        url: window.location.pathname,
        method: 'POST',
        data: {
            ajax: 'excluir_notas',
            refs: JSON.stringify(refs)
        },
        dataType: 'json',
        timeout: 120000,
        success: function(response) {
            $('#loadingOverlay').hide();
            btn.prop('disabled', false).html('<i class="bi bi-check-circle"></i> Confirmar Exclusão');
            
            if (response.sucesso) {
                var msg = response.mensagem || '✅ Exclusão concluída!';
                if (response.excluidas > 0) {
                    msg += ' (' + response.excluidas + ' excluídas';
                    if (response.erros > 0) msg += ', ' + response.erros + ' erros';
                    msg += ')';
                }
                mostrarToast(msg, response.erros > 0 && response.excluidas === 0 ? 'warning' : 'success');
                
                notasSelecionadas = {};
                
                setTimeout(function() {
                    carregarLista();
                }, 500);
            } else {
                mostrarToast('❌ ' + (response.erro || 'Erro ao excluir'), 'danger');
            }
        },
        error: function(xhr, status, error) {
            $('#loadingOverlay').hide();
            btn.prop('disabled', false).html('<i class="bi bi-check-circle"></i> Confirmar Exclusão');
            console.error('Erro:', error);
            mostrarToast('❌ Erro ao excluir: ' + error, 'danger');
        }
    });
});

// =============================================
// FUNÇÕES AUXILIARES
// =============================================

function limparFiltros() {
    $('#busca').val('');
    $('#data_inicio').val('');
    $('#data_fim').val('');
    $('#empresa_id').val('');
    statusFiltroAtual = '';
    
    var url = new URL(window.location.href);
    url.searchParams.delete('status');
    window.history.pushState({}, '', url.toString());
    
    $('.stat-card').removeClass('active');
    $('.stat-card.total').addClass('active');
    
    carregarLista();
}

function recarregarLista() {
    carregarLista();
}

function mostrarToast(mensagem, tipo) {
    var bg = tipo == 'success' ? 'bg-success' : (tipo == 'danger' ? 'bg-danger' : (tipo == 'warning' ? 'bg-warning' : 'bg-info'));
    var icon = tipo == 'success' ? 'bi-check-circle' : (tipo == 'danger' ? 'bi-exclamation-triangle' : (tipo == 'warning' ? 'bi-exclamation-circle' : 'bi-info-circle'));
    var toast = $('<div class="toast show" role="alert" data-bs-autohide="true" data-bs-delay="5000">' +
        '<div class="toast-header ' + bg + ' text-white">' +
        '<strong class="me-auto"><i class="bi ' + icon + '"></i> Notificação</strong>' +
        '<button type="button" class="btn-close btn-close-white" data-bs-dismiss="toast"></button>' +
        '</div>' +
        '<div class="toast-body">' + mensagem + '</div>' +
        '</div>');
    $('#toastContainer').append(toast);
    toast.toast('show');
    setTimeout(function() { toast.remove(); }, 5000);
}

// =============================================
// INICIALIZAÇÃO
// =============================================

$(document).ready(function() {
    // Carregar com status filtrado se existir
    var urlParams = new URLSearchParams(window.location.search);
    if (urlParams.has('status')) {
        statusFiltroAtual = urlParams.get('status');
        $('.stat-card.' + statusFiltroAtual).addClass('active');
    } else {
        $('.stat-card.total').addClass('active');
    }
    
    carregarLista();
    
    $('#busca').on('keypress', function(e) {
        if (e.which === 13) {
            carregarLista();
        }
    });
    
    $('#data_inicio, #data_fim, #empresa_id').on('change', function() {
        carregarLista();
    });
});

setTimeout(function() {
    var total = <?php echo $totalNotas; ?>;
    if (total > 0) {
        mostrarToast('📌 ' + total + ' nota(s) encontrada(s). Selecione as que deseja excluir.', 'info');
    } else {
        mostrarToast('📌 Nenhuma nota encontrada', 'info');
    }
}, 1000);
</script>

<?php include 'includes/footer.php'; ?>
</body>
</html>