// ══════════════════════════════════════════════
// RRB Admin — Module: depositos-banco
// ══════════════════════════════════════════════

function dbnInit() {
const now = new Date();
const selMes  = document.getElementById('dbn-mes');
const inpAnio = document.getElementById('dbn-anio');
if (selMes && !selMes.dataset.init) {
  selMes.value        = now.getMonth() + 1;
  inpAnio.value       = now.getFullYear();
  selMes.dataset.init = '1';
}
}

async function dbnCargar() {
const mes  = parseInt(document.getElementById('dbn-mes').value);
const anio = parseInt(document.getElementById('dbn-anio').value);
if (!mes || !anio) { alert('Selecciona mes y año'); return; }

document.getElementById('dbn-loading').style.display       = 'block';
document.getElementById('dbn-result').style.display        = 'none';
document.getElementById('dbn-empty').style.display         = 'none';
document.getElementById('dbn-summary').style.display       = 'none';
document.getElementById('dbn-btn-export').style.display    = 'none';
document.getElementById('dbn-filtro-cuentas').style.display = 'none';
_dbnCuentaActiva = null;

try {
  const res = await api('GET', `api/depositos-banco.php?mes=${mes}&anio=${anio}`);
  if (!res.ok) throw new Error(res.error || 'Error al cargar datos');

  // Construir nombre_completo en el cliente como respaldo
  _dbnData = (res.data || []).map(r => ({
    ...r,
    nombre_completo: r.nombre_completo ||
      [r.nombre, r.appat, r.apmat].filter(Boolean).join(' ').trim()
  }));

  document.getElementById('dbn-loading').style.display = 'none';

  if (_dbnData.length === 0) {
    document.getElementById('dbn-empty').style.display = 'block';
    document.getElementById('dbn-summary').style.display = 'grid';
    document.getElementById('dbn-total-monto').textContent = '$0.00';
    document.getElementById('dbn-total-regs').textContent  = '0';
    document.getElementById('dbn-periodo').textContent     = `${_dbnMeses[mes]} ${anio}`;
    return;
  }

  // Construir chips de cuentas únicas
  dbnRenderChips();

  // Mostrar todos los datos inicialmente
  dbnAplicarFiltro();

  document.getElementById('dbn-periodo').textContent   = `${_dbnMeses[mes]} ${anio}`;
  document.getElementById('dbn-summary').style.display = 'grid';

} catch(e) {
  document.getElementById('dbn-loading').style.display = 'none';
  alert('Error: ' + e.message);
}
}

function dbnRenderChips() {
// Obtener cuentas únicas ordenadas
const cuentas = [...new Set(_dbnData.map(r => r.cuenta || '').filter(Boolean))].sort();
const chips   = document.getElementById('dbn-chips');

chips.innerHTML = '';

// Chip "Todas"
const chipTodas = document.createElement('button');
chipTodas.textContent = 'Todas';
chipTodas.dataset.cuenta = '';
chipTodas.style.cssText = 'padding:5px 14px;border-radius:20px;border:2px solid var(--primary);background:var(--primary);color:#fff;font-size:12px;font-weight:600;cursor:pointer;transition:all .15s';
chipTodas.onclick = () => dbnFiltrarCuenta(null);
chips.appendChild(chipTodas);

cuentas.forEach(cuenta => {
  const btn = document.createElement('button');
  btn.textContent      = cuenta;
  btn.dataset.cuenta   = cuenta;
  btn.style.cssText    = 'padding:5px 14px;border-radius:20px;border:2px solid #ddd;background:#fff;color:#444;font-size:12px;font-weight:500;cursor:pointer;transition:all .15s';
  btn.onclick = () => dbnFiltrarCuenta(cuenta);
  chips.appendChild(btn);
});

document.getElementById('dbn-filtro-cuentas').style.display = 'block';
}

function dbnFiltrarCuenta(cuenta) {
_dbnCuentaActiva = cuenta;

// Actualizar estilos de chips
document.querySelectorAll('#dbn-chips button').forEach(btn => {
  const esteActivo = (cuenta === null && btn.dataset.cuenta === '') ||
                     (btn.dataset.cuenta === cuenta);
  if (esteActivo) {
    btn.style.background = 'var(--primary)';
    btn.style.borderColor = 'var(--primary)';
    btn.style.color = '#fff';
  } else {
    btn.style.background = '#fff';
    btn.style.borderColor = '#ddd';
    btn.style.color = '#444';
  }
});

dbnAplicarFiltro();
}

function dbnAplicarFiltro() {
_dbnFiltrado = _dbnCuentaActiva === null
  ? [..._dbnData]
  : _dbnData.filter(r => r.cuenta === _dbnCuentaActiva);

// Actualizar tarjetas de resumen
const total = _dbnFiltrado.reduce((s, r) => s + Number(r.monto), 0);
document.getElementById('dbn-total-monto').textContent =
  '$' + total.toLocaleString('es-MX', {minimumFractionDigits:2, maximumFractionDigits:2});
document.getElementById('dbn-total-regs').textContent = _dbnFiltrado.length;

if (_dbnFiltrado.length === 0) {
  document.getElementById('dbn-result').style.display     = 'none';
  document.getElementById('dbn-empty').style.display      = 'block';
  document.getElementById('dbn-btn-export').style.display = 'none';
  return;
}

document.getElementById('dbn-empty').style.display      = 'none';
document.getElementById('dbn-result').style.display     = 'block';
document.getElementById('dbn-btn-export').style.display = 'inline-block';

dbnOrdenarYRenderizar();
}

function dbnSortBy(col) {
if (_dbnSortCol === col) {
  _dbnSortDir = _dbnSortDir === 'asc' ? 'desc' : 'asc';
} else {
  _dbnSortCol = col;
  _dbnSortDir = 'asc';
}
['fechat','trans','cd','cuenta','monto'].forEach(c => {
  const el = document.getElementById('dbn-sort-' + c);
  if (el) el.textContent = c === _dbnSortCol ? (_dbnSortDir === 'asc' ? '▲' : '▼') : '⇅';
});
dbnOrdenarYRenderizar();
}

function dbnOrdenarYRenderizar() {
const col = _dbnSortCol;
const dir = _dbnSortDir === 'asc' ? 1 : -1;

const sorted = [..._dbnFiltrado].sort((a, b) => {
  let va = a[col] ?? '';
  let vb = b[col] ?? '';
  if (col === 'trans' || col === 'cd' || col === 'monto') {
    return (Number(va) - Number(vb)) * dir;
  }
  return String(va).localeCompare(String(vb), 'es') * dir;
});

dbnRenderTabla(sorted);
}

function dbnRenderTabla(rows) {
const tbody = document.getElementById('dbn-tbody');
const tfoot = document.getElementById('dbn-tfoot');

tbody.innerHTML = rows.map((r, i) => {
  const fecha = r.fechat ? r.fechat.substring(0, 10) : '';
  const monto = Number(r.monto).toLocaleString('es-MX', {minimumFractionDigits:2, maximumFractionDigits:2});
  const par   = i % 2 === 0 ? '' : 'background:#fafafa';
  return `<tr style="${par}">
    <td style="padding:10px 14px;border-bottom:1px solid #f0f0f0;color:#aaa;font-size:12px">${i + 1}</td>
    <td style="padding:10px 14px;border-bottom:1px solid #f0f0f0;white-space:nowrap">${fecha}</td>
    <td style="padding:10px 14px;border-bottom:1px solid #f0f0f0">${r.trans}</td>
    <td style="padding:10px 14px;border-bottom:1px solid #f0f0f0">${r.cd}</td>
    <td style="padding:10px 14px;border-bottom:1px solid #f0f0f0">${r.consec}</td>
    <td style="padding:10px 14px;border-bottom:1px solid #f0f0f0">${r.inv}</td>
    <td style="padding:10px 14px;border-bottom:1px solid #f0f0f0;font-weight:500">${r.nombre_completo || ''}</td>
    <td style="padding:10px 14px;border-bottom:1px solid #f0f0f0;font-family:monospace">${r.cuenta || ''}</td>
    <td style="padding:10px 14px;border-bottom:1px solid #f0f0f0;text-align:right;font-weight:600;color:var(--primary)">$${monto}</td>
  </tr>`;
}).join('');

const totalMonto = rows.reduce((s, r) => s + Number(r.monto), 0);
tfoot.innerHTML = `<tr style="background:#f0f4fa;font-weight:700">
  <td colspan="8" style="padding:12px 14px;text-align:right;font-size:13px;color:var(--muted)">TOTAL (${rows.length} registros)</td>
  <td style="padding:12px 14px;text-align:right;font-size:14px;color:var(--primary)">$${totalMonto.toLocaleString('es-MX', {minimumFractionDigits:2, maximumFractionDigits:2})}</td>
</tr>`;
}

function dbnExportarExcel() {
if (!_dbnFiltrado.length) return;
const mes    = parseInt(document.getElementById('dbn-mes').value);
const anio   = parseInt(document.getElementById('dbn-anio').value);
const sufijo = _dbnCuentaActiva ? `-${_dbnCuentaActiva}` : '';

const xmlRows = _dbnFiltrado.map(r => {
  const fecha = r.fechat ? r.fechat.substring(0, 10) : '';
  const esc   = v => String(v ?? '').replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
  return `<Row>
    <Cell><Data ss:Type="String">${esc(fecha)}</Data></Cell>
    <Cell><Data ss:Type="Number">${esc(r.trans)}</Data></Cell>
    <Cell><Data ss:Type="Number">${esc(r.cd)}</Data></Cell>
    <Cell><Data ss:Type="Number">${esc(r.consec)}</Data></Cell>
    <Cell><Data ss:Type="Number">${esc(r.inv)}</Data></Cell>
    <Cell><Data ss:Type="String">${esc(r.nombre_completo)}</Data></Cell>
    <Cell><Data ss:Type="String">${esc(r.cuenta)}</Data></Cell>
    <Cell><Data ss:Type="Number">${Number(r.monto).toFixed(2)}</Data></Cell>
  </Row>`;
}).join('');

const xml = `<?xml version="1.0" encoding="UTF-8"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<Styles>
  <Style ss:ID="header">
    <Font ss:Bold="1" ss:Color="#FFFFFF"/>
    <Interior ss:Color="#1a3a5c" ss:Pattern="Solid"/>
  </Style>
  <Style ss:ID="total">
    <Font ss:Bold="1"/>
    <Interior ss:Color="#EEF2F8" ss:Pattern="Solid"/>
  </Style>
</Styles>
<Worksheet ss:Name="Depositos">
  <Table>
    <Row>
      <Cell ss:StyleID="header"><Data ss:Type="String">Fecha</Data></Cell>
      <Cell ss:StyleID="header"><Data ss:Type="String">Trans.</Data></Cell>
      <Cell ss:StyleID="header"><Data ss:Type="String">CD</Data></Cell>
      <Cell ss:StyleID="header"><Data ss:Type="String">Consec.</Data></Cell>
      <Cell ss:StyleID="header"><Data ss:Type="String">Inv.</Data></Cell>
      <Cell ss:StyleID="header"><Data ss:Type="String">Nombre Completo</Data></Cell>
      <Cell ss:StyleID="header"><Data ss:Type="String">Cuenta</Data></Cell>
      <Cell ss:StyleID="header"><Data ss:Type="String">Monto</Data></Cell>
    </Row>
    ${xmlRows}
    <Row>
      <Cell ss:StyleID="total" ss:MergeAcross="6"><Data ss:Type="String">TOTAL (${_dbnFiltrado.length} registros)</Data></Cell>
      <Cell ss:StyleID="total"><Data ss:Type="Number">${_dbnFiltrado.reduce((s,r)=>s+Number(r.monto),0).toFixed(2)}</Data></Cell>
    </Row>
  </Table>
</Worksheet>
</Workbook>`;

const blob = new Blob([xml], { type: 'application/vnd.ms-excel;charset=utf-8;' });
const url  = URL.createObjectURL(blob);
const a    = document.createElement('a');
a.href     = url;
a.download = `depositos-banco-${_dbnMeses[mes]}-${anio}${sufijo}.xls`;
a.click();
URL.revokeObjectURL(url);
}

async function kycAccion(idInver, accion, btn) {
const labels = { aprobar: 'aprobar', rechazar: 'rechazar', pendiente: 'marcar en revisión' };
if (!confirm(`¿Deseas ${labels[accion]} el KYC del distribuidor #${idInver}?`)) return;

const orig = btn.textContent;
btn.disabled = true;
btn.textContent = '⏳...';

try {
  const data = await api('POST', 'api/kyc-accion.php', { id_inver: idInver, accion });
  if (!data.ok) throw new Error(data.error || 'Error');
  // Recargar la lista con el filtro actual
  await kycCargar(_kycFiltroActual);
} catch(e) {
  alert('Error: ' + e.message);
  btn.disabled = false;
  btn.textContent = orig;
}
}

