// ══════════════════════════════════════════════
// RRB Admin — Module: entrega
// ══════════════════════════════════════════════

/* ═══════════════════════════════════════════════════════════════════════════
 MÓDULO ENTREGA
 ═══════════════════════════════════════════════════════════════════════════ */

let _entTab = 'individual'; // 'individual' | 'agrupado'
let _entDatos = { individual: [], agrupado: [] };

function entCambiarTab(tab) {
_entTab = tab;
const tabInd = document.getElementById('ent-tab-ind');
const tabAgr = document.getElementById('ent-tab-agr');
const activo = 'padding:10px 20px;border:none;background:none;cursor:pointer;font-size:14px;font-weight:600;color:var(--primary);border-bottom:3px solid var(--primary);margin-bottom:-2px';
const inact  = 'padding:10px 20px;border:none;background:none;cursor:pointer;font-size:14px;font-weight:600;color:#aaa;border-bottom:3px solid transparent;margin-bottom:-2px';
tabInd.style.cssText = tab === 'individual' ? activo : inact;
tabAgr.style.cssText = tab === 'agrupado'   ? activo : inact;
entRenderLista();
}

let _entCentrosLoaded = false;

async function entInit() {
if (_entCentrosLoaded) return;
const sel = document.getElementById('ent-cdentrega');
try {
  const data = await api('GET', 'api/entrega-centros.php');
  if (data.ok && data.centros && data.centros.length) {
    sel.innerHTML = '<option value="">-- Selecciona --</option>' +
      data.centros.map(c => `<option value="${c.idusuarios_ci}">${c.idusuarios_ci} — ${c.nombre}</option>`).join('');
    _entCentrosLoaded = true;
    // Auto-select si es centro logueado
    if (esCentro()) { autoSelectCentro('ent-cdentrega'); }
  }
} catch(e) {
  console.warn('entInit error:', e);
}
}

async function entCargar() {
const cdentrega = document.getElementById('ent-cdentrega').value.trim();
const fecha     = document.getElementById('ent-fecha').value;
const lista     = document.getElementById('ent-lista');

if (!cdentrega) {
  lista.innerHTML = '<div style="text-align:center;padding:20px;color:#dc3545;font-size:13px">Selecciona un centro de entrega</div>';
  return;
}

lista.innerHTML = '<div style="text-align:center;padding:30px;color:#aaa;font-size:13px">⏳ Cargando...</div>';

try {
  // Cargar ambas tabs en paralelo
  let urlBase2 = `api/entrega-pendientes.php?cdentrega=${encodeURIComponent(cdentrega)}`;
  if (fecha) urlBase2 += `&fecha=${encodeURIComponent(fecha)}`;

  const [resInd, resAgr] = await Promise.all([
    api('GET', urlBase2 + '&tab=individual'),
    api('GET', urlBase2 + '&tab=agrupado')
  ]);

  if (!resInd.success) throw new Error(resInd.message || 'Error al cargar individuales');
  if (!resAgr.success) throw new Error(resAgr.message || 'Error al cargar agrupadas');

  _entDatos.individual = resInd.data.notas  || [];
  _entDatos.agrupado   = resAgr.data.grupos || [];

  entRenderLista();
} catch(e) {
  lista.innerHTML = `<div style="text-align:center;padding:20px;color:#dc3545;font-size:13px">❌ ${e.message}</div>`;
}
}

function entRenderLista() {
const lista = document.getElementById('ent-lista');
if (_entTab === 'individual') {
  entRenderIndividuales(lista);
} else {
  entRenderAgrupadas(lista);
}
}

function entRenderIndividuales(lista) {
const notas = _entDatos.individual;
if (!notas.length) {
  lista.innerHTML = '<div style="text-align:center;padding:40px;color:#aaa;font-size:13px">Sin notas individuales pendientes de entrega</div>';
  return;
}
lista.innerHTML = notas.map(n => {
  const tipoLabel = n.tipo == 10 ? 'Venta' : 'Salida';
  const prods = (n.productos || []).map(p =>
    `<span style="display:inline-block;background:#e8f0fe;color:#1a3a6b;border-radius:4px;padding:2px 8px;font-size:11px;margin:2px">${p.nombre} ×${p.cant}</span>`
  ).join('');
  return `
    <div style="background:#fff;border:1px solid #e0e0e0;border-radius:10px;padding:14px 16px">
      <div style="display:flex;align-items:flex-start;gap:12px">
        <div style="flex:1;min-width:0">
          <div style="display:flex;align-items:center;gap:8px;flex-wrap:wrap">
            <span style="font-size:14px;font-weight:700;color:var(--primary)">#${n.idtransacciones}</span>
            <span style="background:#e8f0fe;color:#1a3a6b;padding:2px 8px;border-radius:12px;font-size:11px;font-weight:600">${tipoLabel}</span>
            <span style="background:#f0fdf4;color:#166534;padding:2px 8px;border-radius:12px;font-size:11px;font-weight:600">PENDIENTE</span>
          </div>
          <div style="font-size:13px;color:var(--text);margin-top:4px">${n.nombre_dist} <span style="color:#aaa">(${n.referencia})</span></div>
          <div style="font-size:12px;color:var(--muted);margin-top:2px">${n.fechat} · Centro: ${n.cdentrega} · ${fmtNum(n.puntos)} pts · ${fmtMxn(n.monto)}</div>
          <div style="margin-top:6px">${prods}</div>
        </div>
        <button onclick="entConfirmar(${n.idtransacciones}, 'individual', this)"
          style="padding:8px 16px;background:var(--success);color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:13px;font-weight:600;flex-shrink:0">
          ✅ Confirmar entrega
        </button>
      </div>
    </div>`;
}).join('');
}

function entRenderAgrupadas(lista) {
const grupos = _entDatos.agrupado;
if (!grupos.length) {
  lista.innerHTML = '<div style="text-align:center;padding:40px;color:#aaa;font-size:13px">Sin notas agrupadas pendientes de entrega</div>';
  return;
}
lista.innerHTML = grupos.map(g => {
  const prods = (g.productos || []).map(p =>
    `<span style="display:inline-block;background:#e8f0fe;color:#1a3a6b;border-radius:4px;padding:2px 8px;font-size:11px;margin:2px">${p.nombre} ×${p.cant}</span>`
  ).join('');
  const notasInd = (g.notas_individuales || []).map(ni =>
    `<div style="font-size:12px;color:var(--muted);padding:2px 0">#${ni.idtransacciones} — ${ni.nombre_dist} (${ni.referencia}) · ${fmtNum(ni.puntos)} pts</div>`
  ).join('');
  return `
    <div style="background:#fff;border:1px solid #e0e0e0;border-radius:10px;padding:14px 16px">
      <div style="display:flex;align-items:flex-start;gap:12px">
        <div style="flex:1;min-width:0">
          <div style="display:flex;align-items:center;gap:8px;flex-wrap:wrap">
            <span style="font-size:14px;font-weight:700;color:var(--primary)">#${g.idtransacciones}</span>
            <span style="background:#fef3c7;color:#92400e;padding:2px 8px;border-radius:12px;font-size:11px;font-weight:600">Agrupada · Grupo #${g.num_grupo}</span>
            <span style="background:#f0fdf4;color:#166534;padding:2px 8px;border-radius:12px;font-size:11px;font-weight:600">PENDIENTE</span>
          </div>
          <div style="font-size:12px;color:var(--muted);margin-top:4px">${g.fechat} · Centro: ${g.cdentrega}</div>
          <div style="margin-top:6px">${prods}</div>
          ${notasInd ? `<div style="margin-top:8px;padding:8px;background:#f8f9fa;border-radius:6px">
            <div style="font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:4px">Notas incluidas:</div>
            ${notasInd}
          </div>` : ''}
        </div>
        <button onclick="entConfirmar(${g.idtransacciones}, 'agrupado', this)"
          style="padding:8px 16px;background:var(--success);color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:13px;font-weight:600;flex-shrink:0">
          ✅ Confirmar entrega
        </button>
      </div>
    </div>`;
}).join('');
}

async function entConfirmar(idtransacciones, tipo, btn) {
const label = tipo === 'agrupado' ? 'nota agrupada' : 'nota individual';
if (!confirm(`¿Confirmar la entrega de la ${label} #${idtransacciones}?\n\nEsto descontará el stock del centro de entrega.`)) return;

const origText = btn.textContent;
btn.disabled = true;
btn.textContent = '⏳ Procesando...';

try {
  const res = await api('POST', 'api/entrega-confirmar.php', { idtransacciones });
  if (!res.success) throw new Error(res.message || 'Error al confirmar entrega');

  const d = res.data;
  // Quitar de la lista local
  if (tipo === 'individual') {
    _entDatos.individual = _entDatos.individual.filter(n => n.idtransacciones != idtransacciones);
  } else {
    _entDatos.agrupado = _entDatos.agrupado.filter(g => g.idtransacciones != idtransacciones);
  }
  entRenderLista();

  // Mostrar confirmación
  const prodsDesc = (d.productos_descontados || []).map(p => `${p.nombre}: -${p.cant}`).join(', ');
  alert(`✅ Entrega confirmada\n\nNota #${idtransacciones} → ENTREGADO${prodsDesc ? '\nStock descontado: ' + prodsDesc : ''}`);

} catch(e) {
  alert('❌ Error: ' + e.message);
  btn.disabled = false;
  btn.textContent = origText;
}
}

