// ══════════════════════════════════════════════
// RRB Admin — Module: ordenes-pendientes
// ══════════════════════════════════════════════

// ══ ÓRDENES PENDIENTES ══
// ══════════════════════════════════════════════

let _opData = [];
let _opCurrentId = null;
let _opLoading = false;

async function cargarOrdenesPendientes() {
  if (_opLoading) return; // evitar llamadas concurrentes
  _opLoading = true;

  const loading = document.getElementById('op-loading');
  const empty   = document.getElementById('op-empty');
  const wrap    = document.getElementById('op-table-wrap');

  // Resetear estado visual
  if (loading) { loading.style.display = 'block'; loading.innerHTML = '<div style="font-size:32px;margin-bottom:12px">⏳</div><div>Cargando órdenes pendientes...</div>'; }
  if (empty)   empty.style.display   = 'none';
  if (wrap)    wrap.style.display    = 'none';

  try {
    const data = await api('GET', 'api/orders-pending.php');
    _opData = data.data || data.ordenes || [];

    // Re-obtener referencias por si el DOM cambió
    const ld = document.getElementById('op-loading');
    const em = document.getElementById('op-empty');
    const wr = document.getElementById('op-table-wrap');

    if (ld) ld.style.display = 'none';
    if (_opData.length === 0) {
      if (em) em.style.display = 'block';
    } else {
      if (wr) wr.style.display = 'block';
      renderOrdenesPendientes();
    }
  } catch(e) {
    const ld = document.getElementById('op-loading');
    if (ld) ld.innerHTML = '<div style="color:var(--error)">Error al cargar órdenes. Intenta de nuevo.</div>';
  } finally {
    _opLoading = false;
  }
}

function renderOrdenesPendientes() {
  const tbody = document.getElementById('op-tbody');
  tbody.innerHTML = _opData.map(o => {
    const tipoLabel = o.tipo == 7 ? '🛒 Venta' : '📤 Salida';
    const tieneEnvio = o.tiene_envio || o.cdentrega == 8;
    const entregaLabel = tieneEnvio ? '🚚 Domicilio' : '🏦 Centro';
    const total = parseFloat(o.total || 0).toLocaleString('es-MX', {style:'currency',currency:'MXN'});
    const fecha = o.fecha ? new Date(o.fecha).toLocaleDateString('es-MX', {day:'2-digit',month:'short',year:'numeric'}) : '—';
    const nombreDist = o.distribuidor || ((o.nombre || '') + ' ' + (o.appat || ''));
    const folio = o.consec ? 'RRB-' + String(o.idtransacciones).padStart(6,'0') : (o.folio || o.idtransacciones);
    return `
      <tr style="border-bottom:1px solid var(--border);cursor:pointer" onmouseover="this.style.background='#f8fafc'" onmouseout="this.style.background=''">
        <td style="padding:12px 14px;font-weight:700;color:var(--primary)">${folio}</td>
        <td style="padding:12px 14px">
          <div style="font-weight:600">${nombreDist}</div>
          <div style="font-size:12px;color:var(--muted)">${o.email || ''}</div>
        </td>
        <td style="padding:12px 14px">${tipoLabel}</td>
        <td style="padding:12px 14px">${entregaLabel}</td>
        <td style="padding:12px 14px;text-align:right;font-weight:700">${total}</td>
        <td style="padding:12px 14px;color:var(--muted);font-size:13px">${fecha}</td>
        <td style="padding:12px 14px;text-align:center">
          <button onclick="abrirOpDetalle(${o.idtransacciones})" style="padding:7px 16px;background:var(--primary);color:#fff;border:none;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer">Ver detalle</button>
        </td>
      </tr>`;
  }).join('');
}

async function abrirOpDetalle(idtransacciones) {
  _opCurrentId = idtransacciones;
  const modal      = document.getElementById('op-modal');
  const btnSolo    = document.getElementById('op-btn-solo-pago');
  const btnGuia    = document.getElementById('op-btn-con-guia');
  const confirmMsg = document.getElementById('op-confirm-msg');
  modal.style.display = 'block';
  btnSolo.disabled = false;
  btnGuia.disabled = false;
  btnSolo.textContent = '💳 Solo confirmar pago';
  btnGuia.textContent = '✅ Confirmar pago + Guía';
  confirmMsg.style.display = 'none';

  document.getElementById('op-detail-info').innerHTML = '<div style="color:var(--muted)">Cargando...</div>';
  document.getElementById('op-detail-items').innerHTML = '';
  document.getElementById('op-detail-totales').innerHTML = '';
  document.getElementById('op-detail-envio').style.display = 'none';
  document.getElementById('op-input-folio').value = '';
  cargarBancosOp();

  // Buscar en datos ya cargados
  const o = _opData.find(x => x.idtransacciones == idtransacciones) || {};

  // Info general
  const tipoLabel = o.tipo == 7 ? 'Nota de Venta (Pendiente)' : 'Nota de Salida (Pendiente)';
  const metodo = o.confirma_deposito == 1 ? 'Depósito / Transferencia' : (o.metodo_pago || '—');
  const costoEnvio = parseFloat(o.costo_envio || 0);
  const total = parseFloat(o.total || 0).toLocaleString('es-MX', {style:'currency',currency:'MXN'});
  const subtotalVal = (parseFloat(o.total || 0) - costoEnvio);
  const subtotal = subtotalVal.toLocaleString('es-MX', {style:'currency',currency:'MXN'});
  const fecha = o.fecha ? new Date(o.fecha).toLocaleDateString('es-MX', {day:'2-digit',month:'short',year:'numeric'}) : '—';
  const folio = 'RRB-' + String(o.idtransacciones).padStart(6,'0');
  const nombreDist = o.distribuidor || '';

  document.getElementById('op-detail-info').innerHTML = `
    <div style="background:#f8fafc;border-radius:8px;padding:12px">
      <div style="font-size:11px;color:var(--muted);font-weight:600;text-transform:uppercase">Distribuidor</div>
      <div style="font-weight:700;margin-top:4px">${nombreDist}</div>
      <div style="font-size:12px;color:var(--muted)">${o.email || ''} • ${o.tel || ''}</div>
    </div>
    <div style="background:#f8fafc;border-radius:8px;padding:12px">
      <div style="font-size:11px;color:var(--muted);font-weight:600;text-transform:uppercase">Folio / Tipo</div>
      <div style="font-weight:700;margin-top:4px">${folio}</div>
      <div style="font-size:12px;color:var(--muted)">${tipoLabel}</div>
    </div>
    <div style="background:#f8fafc;border-radius:8px;padding:12px">
      <div style="font-size:11px;color:var(--muted);font-weight:600;text-transform:uppercase">Método de Pago</div>
      <div style="font-weight:700;margin-top:4px">${metodo}</div>
    </div>
    <div style="background:#f8fafc;border-radius:8px;padding:12px">
      <div style="font-size:11px;color:var(--muted);font-weight:600;text-transform:uppercase">Fecha</div>
      <div style="font-weight:700;margin-top:4px;font-size:13px">${fecha}</div>
    </div>
  `;

  // Totales (mientras cargan los productos)
  let totalesHtml = `<div style="display:flex;justify-content:space-between;padding:6px 0;font-size:14px"><span style="color:var(--muted)">Subtotal productos</span><span>${subtotal}</span></div>`;
  if (costoEnvio > 0) {
    totalesHtml += `<div style="display:flex;justify-content:space-between;padding:6px 0;font-size:14px"><span style="color:var(--muted)">Costo de envío</span><span>${costoEnvio.toLocaleString('es-MX', {style:'currency',currency:'MXN'})}</span></div>`;
  }
  totalesHtml += `<div style="display:flex;justify-content:space-between;padding:8px 0;font-size:16px;font-weight:700;border-top:2px solid var(--border);margin-top:4px"><span>Total</span><span style="color:var(--primary)">${total}</span></div>`;
  document.getElementById('op-detail-totales').innerHTML = totalesHtml;

  // Dirección de envío (campos editables)
  if (o.tiene_envio && o.direccion) {
    const dir = o.direccion;
    document.getElementById('op-detail-envio').style.display = 'block';
    document.getElementById('op-env-calle').value      = dir.calle      || '';
    document.getElementById('op-env-noext').value      = dir.noExt      || '';
    document.getElementById('op-env-noint').value      = dir.noInt      || '';
    document.getElementById('op-env-colonia').value    = dir.colonia    || '';
    document.getElementById('op-env-ciudad').value     = dir.ciudad     || '';
    document.getElementById('op-env-estado').value     = dir.estado     || '';
    document.getElementById('op-env-cp').value         = dir.cp         || '';
    document.getElementById('op-env-tel').value        = dir.tel        || o.tel || '';
    document.getElementById('op-env-peso').value       = dir.peso != null ? dir.peso : '';
    document.getElementById('op-env-referencia').value = dir.referencia || '';
  } else {
    document.getElementById('op-detail-envio').style.display = 'none';
  }

  // Cargar productos bajo demanda (endpoint ?detalle=)
  document.getElementById('op-detail-items').innerHTML = '<div style="color:var(--muted);font-size:13px">Cargando productos...</div>';
  try {
    const detData = await api('GET', `api/orders-pending.php?detalle=${idtransacciones}`);
    const items = detData.productos || [];
    document.getElementById('op-detail-items').innerHTML = items.length > 0 ? items.map(it => `
      <div style="display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid #f0f0f0">
        <div>
          <span style="font-weight:600">${it.nombre}</span>
          <span style="font-size:12px;color:var(--muted);margin-left:8px">x${it.cantidad}</span>
        </div>
        <div style="font-weight:700">${parseFloat((it.precio || 0) * (it.cantidad || 1)).toLocaleString('es-MX', {style:'currency',currency:'MXN'})}</div>
      </div>`).join('') : '<div style="color:var(--muted);font-size:13px">Sin productos registrados</div>';
  } catch(e) {
    document.getElementById('op-detail-items').innerHTML = '<div style="color:var(--error);font-size:13px">Error al cargar productos</div>';
  }
}

function cerrarOpModal() {
  document.getElementById('op-modal').style.display = 'none';
  _opCurrentId = null;
}

async function cargarBancosOp() {
  const sel = document.getElementById('op-select-banco');
  if (sel.options.length > 1) return; // ya cargados
  try {
    const data = await api('GET', 'api/orders-pending.php?bancos=1');
    (data.bancos || []).forEach(b => {
      const opt = document.createElement('option');
      opt.value = b.id;
      opt.textContent = `${b.banco} — ${b.cuenta} (${b.numero})`;
      sel.appendChild(opt);
    });
  } catch(e) { /* silencioso */ }
}

async function confirmarOrden(generarGuia) {
  if (!_opCurrentId) return;
  const btnSolo  = document.getElementById('op-btn-solo-pago');
  const btnGuia  = document.getElementById('op-btn-con-guia');
  const msg      = document.getElementById('op-confirm-msg');
  const bancoId  = document.getElementById('op-select-banco').value;
  const folio    = document.getElementById('op-input-folio').value.trim();

  // Leer datos de envío editables (si la sección está visible)
  const envioVisible = document.getElementById('op-detail-envio').style.display !== 'none';
  const envioData = envioVisible ? {
    calle:      document.getElementById('op-env-calle').value.trim(),
    noExt:      document.getElementById('op-env-noext').value.trim(),
    noInt:      document.getElementById('op-env-noint').value.trim(),
    colonia:    document.getElementById('op-env-colonia').value.trim(),
    ciudad:     document.getElementById('op-env-ciudad').value.trim(),
    estado:     document.getElementById('op-env-estado').value.trim(),
    cp:         document.getElementById('op-env-cp').value.trim(),
    tel:        document.getElementById('op-env-tel').value.trim(),
    peso:       parseFloat(document.getElementById('op-env-peso').value) || null,
    referencia: document.getElementById('op-env-referencia').value.trim()
  } : null;

  // Deshabilitar ambos botones mientras procesa
  btnSolo.disabled = true;
  btnGuia.disabled = true;
  btnSolo.textContent = '⏳ Procesando...';
  btnGuia.textContent = '⏳ Procesando...';
  msg.style.display = 'none';

  try {
    const data = await api('POST', 'api/orders-confirm.php', {
      idtransacciones: _opCurrentId,
      banco_idbanco:   bancoId || null,
      no_ficha:        folio   || null,
      generar_guia:    generarGuia ? 1 : 0,
      envio:           envioData
    });

    if (data.success) {
      btnSolo.textContent = '💳 Solo confirmar pago';
      btnGuia.textContent = '✅ Confirmar pago + Guía';
      msg.style.display = 'block';
      msg.style.color = '#198754';
      let msgText = '✅ ' + (data.message || 'Nota confirmada correctamente.');
      if (generarGuia) {
        const tracking = data.tracking || data.tracking_number || null;
        const labelUrl = data.label_url || null;
        if (tracking) msgText += ` | Guía: <strong>${tracking}</strong>`;
        if (labelUrl) msgText += ` <a href="${labelUrl}" target="_blank" style="color:#0a7ea4">📄 Ver PDF</a>`;
        if (data.skydropx_error) msgText += `<br><small style="color:orange">⚠️ Skydropx: ${data.skydropx_error}</small>`;
      }
      msg.innerHTML = msgText;
      setTimeout(() => { cerrarOpModal(); cargarOrdenesPendientes(); }, 2500);
    } else {
      btnSolo.disabled = false;
      btnGuia.disabled = false;
      btnSolo.textContent = '💳 Solo confirmar pago';
      btnGuia.textContent = '✅ Confirmar pago + Guía';
      msg.style.display = 'block';
      msg.style.color = 'var(--error)';
      msg.textContent = data.error || data.message || 'Error al confirmar. Intenta de nuevo.';
    }
  } catch(e) {
    btnSolo.disabled = false;
    btnGuia.disabled = false;
    btnSolo.textContent = '💳 Solo confirmar pago';
    btnGuia.textContent = '✅ Confirmar pago + Guía';
    msg.style.display = 'block';
    msg.style.color = 'var(--error)';
    msg.textContent = 'Error de conexión. Intenta de nuevo.';
  }
}


// ════════════════════════════════════════════
