var CostosIniciales = {
    API_URL: '',
    sesion: null,
    _cambios: [],
    _paginaActual: 1,
    _allData: [],
    _searchTimer: null,

    init: function() {
        this.API_URL = (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1')
            ? 'http://localhost:3000/api'
            : 'https://api.sabha.pe/api';
        this.cargarSesion();
        this._allData = [];
        this.mostrarVista();
    },

    cargarSesion: function() {
        var s = localStorage.getItem('erp_session') || sessionStorage.getItem('erp_session');
        if (s) { try { this.sesion = JSON.parse(s); } catch(e) {} }
    },

    mostrarVista: function() {
        var self = this;
        var page = document.getElementById('pageCostosIniciales');
        if (!page) return;
        self.cargarSesion();
        self._cambios = [];
        self._paginaActual = 1;

        page.innerHTML = `
            <div class="ci-container">
                <div class="ci-header">
                    <h2><i class="fas fa-dollar-sign" style="color:#1A4480;margin-right:8px"></i>Costos Iniciales</h2>
                    <div style="display:flex;gap:6px;align-items:center">
                        <button id="ciBtnImprimir" class="btn-prov btn-prov-icono" title="Imprimir"><i class="fas fa-print"></i></button>
                        <div class="prov-export-wrap">
                            <button id="ciBtnExportar" class="btn-prov btn-prov-icono" title="Exportar"><i class="fas fa-download"></i></button>
                            <div class="prov-export-dd" id="ciExportDD">
                                <button class="prov-export-dd-item" onclick="CostosIniciales.exportarExcel()"><i class="fas fa-file-excel"></i> Excel</button>
                                <button class="prov-export-dd-item" onclick="CostosIniciales.exportarCSV()"><i class="fas fa-file-csv"></i> CSV</button>
                                <button class="prov-export-dd-item" onclick="CostosIniciales.exportarPDF()"><i class="fas fa-file-pdf"></i> PDF</button>
                                <button class="prov-export-dd-item" onclick="CostosIniciales.exportarTXT()"><i class="fas fa-file-lines"></i> TXT</button>
                            </div>
                        </div>
                        <button id="ciBtnAjusteMasivo" class="ci-btn-secondary" style="margin-left:6px"><i class="fas fa-percentage" style="margin-right:4px"></i>Ajuste Masivo</button>
                        <button id="ciBtnGuardar" class="ci-btn-primary" disabled><i class="fas fa-save" style="margin-right:4px"></i>Guardar (<span id="ciContCambios">0</span>)</button>
                    </div>
                </div>

                <div class="ci-filtros">
                    <input type="text" id="ciBuscar" placeholder="Buscar artículo..." style="flex:1;padding:6px 12px;font-size:0.78rem;border:1px solid #CBD5E1;border-radius:6px;text-transform:uppercase">
                    <select id="ciFiltroFamilia" style="padding:6px 12px;font-size:0.78rem;border:1px solid #CBD5E1;border-radius:6px;background:#fff;max-width:200px">
                        <option value="">Todas las familias</option>
                    </select>
                    <button id="ciBtnBuscar" class="ci-btn-secondary"><i class="fas fa-search"></i></button>
                </div>

                <div class="ci-tabla-wrap">
                    <table class="ci-tabla">
                        <thead>
                            <tr>
                                <th style="width:50px">Código</th>
                                <th style="width:200px">Artículo</th>
                                <th style="width:140px">Familia</th>
                                <th style="width:80px;text-align:right">Stock</th>
                                <th style="width:100px;text-align:right">Costo Actual</th>
                                <th style="width:120px;text-align:right">Costo Nuevo</th>
                                <th style="width:100px;text-align:right">Diferencia</th>
                                <th style="width:50px"></th>
                            </tr>
                        </thead>
                        <tbody id="ciTablaBody">
                            <tr><td colspan="8" style="text-align:center;padding:24px;color:#94a3b8"><i class="fas fa-spinner fa-spin"></i> Cargando...</td></tr>
                        </tbody>
                    </table>
                </div>
                <div id="ciPaginacion" class="ci-paginacion"></div>
            </div>

            <div id="ciModalAjuste" style="display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(10,22,40,0.6);z-index:1000;display:none;align-items:center;justify-content:center">
                <div class="ci-modal">
                    <h3 style="margin:0 0 16px;font-size:1rem;font-weight:700;color:#1e293b"><i class="fas fa-percentage" style="color:#1A4480;margin-right:6px"></i>Ajuste Masivo por Familia</h3>
                    <div class="ci-form-group" style="margin-bottom:12px">
                        <label>Familia</label>
                        <select id="ciAjusteFamilia" style="width:100%;padding:8px 12px;font-size:0.82rem;border:1px solid #CBD5E1;border-radius:6px">
                            <option value="">Seleccione...</option>
                        </select>
                    </div>
                    <div class="ci-form-group" style="margin-bottom:16px">
                        <label>Porcentaje de Ajuste</label>
                        <div style="display:flex;gap:6px;align-items:center">
                            <input type="number" id="ciAjustePorcentaje" step="0.1" style="flex:1;padding:8px 12px;font-size:0.82rem;border:1px solid #CBD5E1;border-radius:6px" placeholder="Ej: 10 o -5">
                            <span style="font-size:0.82rem;color:#64748b">%</span>
                        </div>
                        <p style="font-size:0.72rem;color:#94a3b8;margin-top:4px">Positivo = incremento, Negativo = decremento</p>
                    </div>
                    <div style="display:flex;gap:8px;justify-content:flex-end">
                        <button onclick="CostosIniciales.cerrarModalAjuste()" class="ci-btn-secondary">Cancelar</button>
                        <button onclick="CostosIniciales.aplicarAjusteMasivo()" class="ci-btn-primary">Aplicar</button>
                    </div>
                </div>
            </div>`;

        self.cargarFamilias();
        self.cargarLista();
        self._bindEvents();
    },

    _bindEvents: function() {
        var self = this;
        document.getElementById('ciBtnBuscar').addEventListener('click', function() { self.cargarLista(1); });
        document.getElementById('ciBuscar').addEventListener('input', function() {
            clearTimeout(self._searchTimer);
            self._searchTimer = setTimeout(function() { self.cargarLista(1); }, 350);
        });
        document.getElementById('ciBuscar').addEventListener('keydown', function(e) { if (e.key === 'Enter') { clearTimeout(self._searchTimer); self.cargarLista(1); } });
        document.getElementById('ciFiltroFamilia').addEventListener('change', function() { self.cargarLista(1); });
        document.getElementById('ciBtnGuardar').addEventListener('click', function() { self.guardarCambios(); });
        document.getElementById('ciBtnAjusteMasivo').addEventListener('click', function() { self.abrirModalAjuste(); });
        document.getElementById('ciBtnImprimir').addEventListener('click', function() { self.imprimir(); });
        document.getElementById('ciBtnExportar').addEventListener('click', function(e) {
            e.stopPropagation();
            document.getElementById('ciExportDD').classList.toggle('visible');
        });
        document.addEventListener('click', function(e) {
            if (!e.target.closest('.prov-export-wrap')) {
                var dd = document.getElementById('ciExportDD');
                if (dd) dd.classList.remove('visible');
            }
        });
    },

    cargarFamilias: function() {
        var self = this;
        var url = self.API_URL + '/costos-iniciales/familias?id_empresa=' + self.sesion.id_empresa;
        if (self.sesion && self.sesion.id_sucursal) url += '&id_sucursal=' + self.sesion.id_sucursal;
        fetch(url)
        .then(function(r) { return r.json(); })
        .then(function(res) {
            if (res.ok && res.data) {
                var select = document.getElementById('ciFiltroFamilia');
                var selectAjuste = document.getElementById('ciAjusteFamilia');
                var html = '<option value="">Todas las familias</option>';
                var htmlAjuste = '<option value="">Seleccione...</option>';
                res.data.forEach(function(f) {
                    html += '<option value="' + f.id_familia + '">' + f.descripcion + '</option>';
                    htmlAjuste += '<option value="' + f.id_familia + '">' + f.descripcion + '</option>';
                });
                select.innerHTML = html;
                selectAjuste.innerHTML = htmlAjuste;
            }
        });
    },

    cargarLista: function(page) {
        var self = this;
        page = page || 1;
        self._paginaActual = page;
        var buscar = document.getElementById('ciBuscar').value;
        var familia = document.getElementById('ciFiltroFamilia').value;
        var tbody = document.getElementById('ciTablaBody');

        var url = self.API_URL + '/costos-iniciales?id_empresa=' + self.sesion.id_empresa + '&page=' + page + '&limit=50';
        if (self.sesion && self.sesion.id_sucursal) url += '&id_sucursal=' + self.sesion.id_sucursal;
        if (buscar) url += '&buscar=' + encodeURIComponent(buscar);
        if (familia) url += '&familia=' + familia;

        fetch(url)
        .then(function(r) { return r.json(); })
        .then(function(res) {
            if (!res.ok || !res.data || res.data.length === 0) {
                tbody.innerHTML = '<tr><td colspan="8" style="text-align:center;padding:24px;color:#94a3b8"><i class="fas fa-inbox" style="font-size:1.3rem;display:block;margin-bottom:6px"></i>No hay artículos</td></tr>';
                document.getElementById('ciPaginacion').innerHTML = '';
                return;
            }
            var html = '';
            res.data.forEach(function(art) {
                var costoActual = parseFloat(art.costo_promedio) || 0;
                var costoGuardado = self._cambios.find(function(c) { return c.id_articulo === art.id_articulo; });
                var costoNuevo = costoGuardado ? costoGuardado.costo_unitario : costoActual;
                var diferencia = costoNuevo - costoActual;

                html += '<tr data-id="' + art.id_articulo + '">';
                html += '<td style="font-family:monospace;font-size:0.78rem">' + (art.cod_articulo || '-') + '</td>';
                html += '<td>' + (art.nombre || '') + '</td>';
                html += '<td style="font-size:0.78rem;color:#64748b">' + (art.familia_nombre || '-') + '</td>';
                html += '<td style="text-align:right;font-weight:600">' + (parseFloat(art.stock) || 0).toFixed(2) + '</td>';
                html += '<td style="text-align:right;font-weight:600">S/ ' + costoActual.toFixed(2) + '</td>';
                html += '<td style="text-align:right"><input type="number" class="ci-costo-input" data-id="' + art.id_articulo + '" data-actual="' + costoActual + '" value="' + costoNuevo + '" step="0.01" min="0" style="width:100px"></td>';
                html += '<td style="text-align:right;font-weight:600;color:' + (diferencia > 0 ? '#10B981' : diferencia < 0 ? '#dc2626' : '#64748b') + '">' + (diferencia >= 0 ? '+' : '') + diferencia.toFixed(2) + '</td>';
                html += '<td style="text-align:center">';
                if (costoGuardado) {
                    html += '<button onclick="CostosIniciales.revertirCambio(' + art.id_articulo + ')" class="ci-action-btn" style="color:#F59E0B" title="Revertir"><i class="fas fa-undo"></i></button>';
                }
                html += '</td>';
                html += '</tr>';
            });
            tbody.innerHTML = html;
            self._allData = res.data;
            self._renderPaginacion(res.totalPaginas, page);
            self._bindInputEvents();
        })
        .catch(function() {
            tbody.innerHTML = '<tr><td colspan="8" style="text-align:center;padding:16px;color:#dc2626">Error al cargar</td></tr>';
        });
    },

    _renderPaginacion: function(totalPaginas, paginaActual) {
        if (totalPaginas <= 1) { document.getElementById('ciPaginacion').innerHTML = ''; return; }
        var html = '';
        if (paginaActual > 1) html += '<button onclick="CostosIniciales.cargarLista(' + (paginaActual - 1) + ')" class="ci-page-btn">&laquo;</button>';
        for (var i = 1; i <= totalPaginas; i++) {
            if (i === paginaActual) html += '<button class="ci-page-btn active">' + i + '</button>';
            else if (Math.abs(i - paginaActual) <= 2 || i === 1 || i === totalPaginas) html += '<button onclick="CostosIniciales.cargarLista(' + i + ')" class="ci-page-btn">' + i + '</button>';
            else if (Math.abs(i - paginaActual) === 3) html += '<span style="padding:0 4px;color:#94a3b8">...</span>';
        }
        if (paginaActual < totalPaginas) html += '<button onclick="CostosIniciales.cargarLista(' + (paginaActual + 1) + ')" class="ci-page-btn">&raquo;</button>';
        document.getElementById('ciPaginacion').innerHTML = html;
    },

    _bindInputEvents: function() {
        var self = this;
            document.querySelectorAll('.ci-costo-input').forEach(function(input) {
            input.addEventListener('change', function() {
                var idArt = parseInt(this.getAttribute('data-id'));
                var costoActual = parseFloat(this.getAttribute('data-actual'));
                var costoNuevo = parseFloat(this.value) || 0;

                var existente = self._cambios.findIndex(function(c) { return c.id_articulo === idArt; });

                if (Math.abs(costoNuevo - costoActual) > 0.001) {
                    if (existente >= 0) {
                        self._cambios[existente].costo_unitario = costoNuevo;
                    } else {
                        self._cambios.push({ id_articulo: idArt, costo_unitario: costoNuevo });
                    }
                } else {
                    if (existente >= 0) self._cambios.splice(existente, 1);
                }

                self._actualizarUI();
            });
        });
    },

    _actualizarUI: function() {
        var self = this;
        var btnGuardar = document.getElementById('ciBtnGuardar');
        var contador = document.getElementById('ciContCambios');
        btnGuardar.disabled = self._cambios.length === 0;
        contador.textContent = self._cambios.length;
    },

    revertirCambio: function(idArticulo) {
        var self = this;
        self._cambios = self._cambios.filter(function(c) { return c.id_articulo !== idArticulo; });
        self.cargarLista(self._paginaActual);
        self._actualizarUI();
    },

    guardarCambios: function() {
        var self = this;
        if (self._cambios.length === 0) return;

        Mensaje.confirmacion({
            titulo: 'Actualizar Costos',
            texto: 'Se actualizarán los costos de <strong>' + self._cambios.length + '</strong> artículos.<br><br>¿Continuar?',
            onAceptar: function() {
                fetch(self.API_URL + '/costos-iniciales', {
                    method: 'PUT',
                    headers: { 'Content-Type': 'application/json' },
                    body: JSON.stringify({
                        id_empresa: self.sesion.id_empresa,
                        id_sucursal: self.sesion.id_sucursal || null,
                        cambios: self._cambios,
                        usuario: self.sesion.usuario || 'SISTEMA'
                    })
                })
                .then(function(r) { return r.json(); })
                .then(function(res) {
                    if (res.ok) {
                        Mensaje.exito({ titulo: 'Guardado', texto: res.mensaje });
                        self._cambios = [];
                        self.cargarLista(self._paginaActual);
                        self._actualizarUI();
                    } else {
                        Mensaje.error({ titulo: 'Error', texto: res.mensaje });
                    }
                })
                .catch(function() { Mensaje.error({ titulo: 'Error', texto: 'Error de conexión' }); });
            }
        });
    },

    abrirModalAjuste: function() {
        document.getElementById('ciModalAjuste').style.display = 'flex';
        document.getElementById('ciAjustePorcentaje').value = '';
    },

    cerrarModalAjuste: function() {
        document.getElementById('ciModalAjuste').style.display = 'none';
    },

    aplicarAjusteMasivo: function() {
        var self = this;
        var familia = document.getElementById('ciAjusteFamilia').value;
        var porcentaje = parseFloat(document.getElementById('ciAjustePorcentaje').value);

        if (!familia) { Mensaje.error({ titulo: 'Validación', texto: 'Seleccione una familia' }); return; }
        if (isNaN(porcentaje)) { Mensaje.error({ titulo: 'Validación', texto: 'Ingrese un porcentaje válido' }); return; }

        Mensaje.confirmacion({
            titulo: 'Ajuste Masivo',
            texto: 'Se ajustarán los costos de la familia en <strong>' + (porcentaje >= 0 ? '+' : '') + porcentaje + '%</strong>.<br><br>¿Continuar?',
            onAceptar: function() {
                fetch(self.API_URL + '/costos-iniciales/masivo', {
                    method: 'PUT',
                    headers: { 'Content-Type': 'application/json' },
                    body: JSON.stringify({
                        id_empresa: self.sesion.id_empresa,
                        id_sucursal: self.sesion.id_sucursal || null,
                        id_familia: parseInt(familia),
                        porcentaje: porcentaje,
                        usuario: self.sesion.usuario || 'SISTEMA'
                    })
                })
                .then(function(r) { return r.json(); })
                .then(function(res) {
                    if (res.ok) {
                        Mensaje.exito({ titulo: 'Ajuste Aplicado', texto: res.mensaje });
                        self.cerrarModalAjuste();
                        self.cargarLista(self._paginaActual);
                    } else {
                        Mensaje.error({ titulo: 'Error', texto: res.mensaje });
                    }
                })
                .catch(function() { Mensaje.error({ titulo: 'Error', texto: 'Error de conexión' }); });
            }
        });
    },

    imprimir: function() {
        var self = this;
        var empresa = '';
        try { var s = JSON.parse(localStorage.getItem('erp_session') || sessionStorage.getItem('erp_session')); empresa = s.empresa_razon || ''; } catch(e) {}
        var ahora = new Date();
        var fechaStr = ahora.toLocaleDateString('es-PE') + ' ' + ahora.toLocaleTimeString('es-PE');
        var filtroFamilia = document.getElementById('ciFiltroFamilia');
        var famLabel = filtroFamilia.selectedOptions[0] ? filtroFamilia.selectedOptions[0].text : 'Todas';

        var html = '<!DOCTYPE html><html><head><style>';
        html += 'body{font-family:Arial,sans-serif;font-size:11px;margin:20px}';
        html += '.hdr{text-align:center;margin-bottom:16px}';
        html += '.hdr h2{margin:0 0 4px;font-size:15px}';
        html += '.hdr p{margin:2px 0;color:#555;font-size:11px}';
        html += 'table{width:100%;border-collapse:collapse;margin-top:10px}';
        html += 'th{background:#1A4480;color:#fff;padding:6px 8px;font-size:10px;text-align:left;border:1px solid #0f3366}';
        html += 'td{padding:4px 8px;border:1px solid #ddd;font-size:10px}';
        html += 'tr:nth-child(even){background:#f8fafc}';
        html += '.right{text-align:right}.bold{font-weight:700}';
        html += '.ftr{margin-top:12px;font-size:10px;color:#888;text-align:center;border-top:1px solid #ddd;padding-top:6px}';
        html += '</style></head><body>';
        html += '<div class="hdr"><h2>Costos Iniciales</h2>';
        html += '<p>' + empresa + '</p>';
        html += '<p style="text-align:right">' + fechaStr + '</p></div>';
        html += '<div style="border-radius:8px;overflow:hidden"><table><thead><tr style="clip-path:inset(0 round 6px 6px 0 0)">';
        html += '<th>Código</th><th style="width:40%">Artículo</th><th style="width:18%">Familia</th><th class="right">Stock</th><th class="right">Costo Unit.</th><th class="right">Costo Total</th>';
        html += '</tr></thead><tbody>';

        var total = 0;
        self._allData.forEach(function(art) {
            var costo = parseFloat(art.costo_promedio) || 0;
            var stock = parseFloat(art.stock) || 0;
            var costoTotal = costo * stock;
            total += costoTotal;
            html += '<tr>';
            html += '<td>' + (art.cod_articulo || '') + '</td>';
            html += '<td>' + (art.nombre || '') + '</td>';
            html += '<td>' + (art.familia_nombre || '') + '</td>';
            html += '<td class="right">' + stock.toFixed(2) + '</td>';
            html += '<td class="right bold">S/ ' + costo.toFixed(2) + '</td>';
            html += '<td class="right bold">S/ ' + costoTotal.toFixed(2) + '</td>';
            html += '</tr>';
        });
        html += '</tbody></table></div>';
        html += '<div class="ftr">Total valorizado: S/ ' + total.toFixed(2) + ' | Impreso: ' + fechaStr + '</div>';
        html += '</body></html>';

        var iframe = document.createElement('iframe');
        iframe.style.cssText = 'position:fixed;top:-9999px;width:1px;height:1px';
        document.body.appendChild(iframe);
        var win = iframe.contentWindow;
        win.document.open();
        win.document.write(html);
        win.document.close();
        setTimeout(function() { win.print(); }, 300);
        setTimeout(function() { document.body.removeChild(iframe); }, 1500);
    },

    exportarExcel: function() {
        var self = this;
        if (!self._allData || self._allData.length === 0) { Mensaje.error({ titulo: 'Excel', texto: 'No hay datos para exportar' }); return; }

        if (typeof ExcelJS === 'undefined') {
            var s = document.createElement('script');
            s.src = 'https://cdn.jsdelivr.net/npm/exceljs@4.4.0/dist/exceljs.min.js';
            s.onload = function() { self._generarExcel(); };
            document.head.appendChild(s);
        } else {
            self._generarExcel();
        }
    },

    _generarExcel: function() {
        var self = this;
        var wb = new ExcelJS.Workbook();
        var ws = wb.addWorksheet('Costos Iniciales');
        ws.columns = [
            { header: 'Código', key: 'cod', width: 12 },
            { header: 'Artículo', key: 'nombre', width: 40 },
            { header: 'Familia', key: 'familia', width: 22 },
            { header: 'Stock', key: 'stock', width: 10 },
            { header: 'Costo Unit.', key: 'costo', width: 14 },
            { header: 'Costo Total', key: 'total', width: 14 }
        ];
        ws.getRow(1).font = { bold: true, color: { argb: 'FFFFFFFF' } };
        ws.getRow(1).fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FF1A4480' } };
        ws.getRow(1).alignment = { horizontal: 'center' };

        self._allData.forEach(function(art) {
            var costo = parseFloat(art.costo_promedio) || 0;
            var stock = parseFloat(art.stock) || 0;
            ws.addRow({ cod: art.cod_articulo || '', nombre: art.nombre || '', familia: art.familia_nombre || '', stock: stock, costo: costo, total: stock * costo });
        });

        wb.xlsx.writeBuffer().then(function(buf) {
            var blob = new Blob([buf], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
            var url = URL.createObjectURL(blob);
            var a = document.createElement('a');
            a.href = url;
            a.download = 'costos_iniciales_' + new Date().toISOString().slice(0, 10) + '.xlsx';
            document.body.appendChild(a);
            a.click();
            document.body.removeChild(a);
            URL.revokeObjectURL(url);
        });
    },

    exportarCSV: function() {
        var self = this;
        document.getElementById('ciExportDD').classList.remove('visible');
        if (!self._allData || self._allData.length === 0) { Mensaje.error({ titulo: 'CSV', texto: 'No hay datos para exportar' }); return; }

        var bom = '\uFEFF';
        var rows = [];
        rows.push(['Código', 'Artículo', 'Familia', 'Stock', 'Costo Unitario', 'Costo Total'].join(';'));

        self._allData.forEach(function(art) {
            var costo = parseFloat(art.costo_promedio) || 0;
            var stock = parseFloat(art.stock) || 0;
            var costoTotal = costo * stock;
            rows.push(['"' + (art.cod_articulo || '') + '"', '"' + (art.nombre || '').replace(/"/g, '""') + '"', '"' + (art.familia_nombre || '').replace(/"/g, '""') + '"', stock.toFixed(2).replace('.', ','), costo.toFixed(2).replace('.', ','), costoTotal.toFixed(2).replace('.', ',')].join(';'));
        });

        var blob = new Blob([bom + rows.join('\n')], { type: 'text/csv;charset=utf-8' });
        var url = URL.createObjectURL(blob);
        var a = document.createElement('a');
        a.href = url;
        a.download = 'costos_iniciales_' + new Date().toISOString().slice(0, 10) + '.csv';
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
        URL.revokeObjectURL(url);
    },

    exportarPDF: function() {
        var self = this;
        document.getElementById('ciExportDD').classList.remove('visible');
        self.imprimir();
    },

    exportarTXT: function() {
        var self = this;
        document.getElementById('ciExportDD').classList.remove('visible');
        if (!self._allData || self._allData.length === 0) { Mensaje.error({ titulo: 'TXT', texto: 'No hay datos para exportar' }); return; }

        var rows = [];
        rows.push(['Código', 'Artículo', 'Familia', 'Stock', 'Costo Unitario', 'Costo Total'].join('\t'));

        self._allData.forEach(function(art) {
            var costo = parseFloat(art.costo_promedio) || 0;
            var stock = parseFloat(art.stock) || 0;
            var costoTotal = costo * stock;
            rows.push([art.cod_articulo || '', art.nombre || '', art.familia_nombre || '', stock.toFixed(2), costo.toFixed(2), costoTotal.toFixed(2)].join('\t'));
        });

        var blob = new Blob([rows.join('\n')], { type: 'text/plain;charset=utf-8' });
        var url = URL.createObjectURL(blob);
        var a = document.createElement('a');
        a.href = url;
        a.download = 'costos_iniciales_' + new Date().toISOString().slice(0, 10) + '.txt';
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
        URL.revokeObjectURL(url);
    },

    enlazarMenu: function() {
        var self = this;
        var links = document.querySelectorAll('.nav-link[data-page="CostosIniciales"]');
        links.forEach(function(link) {
            link.addEventListener('click', function(e) {
                e.preventDefault();
                self.init();
            });
        });
    }
};

CostosIniciales.enlazarMenu();
