// ─────────────────────────────────────────────────────
// Órdenes de lacado (Necesidades de compra › Lacado externo). Hoja que acompaña al
// material que sale a lacar: se crea marcando lacados pendientes en demanda.jsx.
// Aquí: abrir/descargar la hoja y el panel "Órdenes emitidas" para reimprimirlas.
// API: /api/demanda/lacado (src/routes/ordenesLacado.js).
// ─────────────────────────────────────────────────────

const lacFecha = (v) => (v ? String(v).slice(0, 10).split('-').reverse().join('/') : '');

// PDF en una pestaña nueva (desde ahí se imprime). La pestaña se abre en el mismo
// clic, antes de cualquier await, para que el navegador no la bloquee como emergente.
async function lacAbrirPdf(id, w = window.open('', '_blank')) {
  try {
    const res = await API.request(`/api/demanda/lacado/ordenes/${id}/pdf`);
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    const url = URL.createObjectURL(await res.blob());
    if (w) w.location.href = url;
    else await API.download(`/api/demanda/lacado/ordenes/${id}/pdf`);
    setTimeout(() => URL.revokeObjectURL(url), 60000);
  } catch (e) {
    if (w) w.close();
    throw e;
  }
}
const lacExcel = (id) => API.download(`/api/demanda/lacado/ordenes/${id}/excel`);

// Nº de orden con enlace a su PDF.
const OrdenLacadoLink = ({ id, numero, onToast }) => (
  <a className="mono" style={{ cursor: 'pointer', whiteSpace: 'nowrap' }} title="Abrir la orden de lacado para imprimir"
    onClick={() => lacAbrirPdf(id).catch((e) => onToast(e.message || 'Error al abrir la orden', true))}>{numero}</a>
);

// Lista de órdenes ya emitidas, agrupadas por empresa, para reimprimirlas.
const OrdenesLacadoPanel = ({ proveedorId, version, resaltar = [], onToast }) => {
  const [rows, setRows] = React.useState(null);
  React.useEffect(() => {
    const qs = proveedorId ? `?proveedor_id=${encodeURIComponent(proveedorId)}` : '';
    API.get(`/api/demanda/lacado/ordenes${qs}`).then(setRows).catch((e) => { setRows([]); onToast(e.message, true); });
  }, [proveedorId, version]);
  const grupos = React.useMemo(() => {
    const g = new Map();
    for (const r of rows || []) {
      // Sin distinguir mayúsculas, igual que al crear la orden ("navarro" = "NAVARRO").
      const nombre = r.empresa || 'Sin empresa';
      const k = nombre.toLowerCase();
      if (!g.has(k)) g.set(k, [nombre, []]);
      g.get(k)[1].push(r);
    }
    return [...g.values()];
  }, [rows]);
  const err = (e) => onToast(e.message || 'Error al descargar', true);
  return (
    <div className="nc-grupo" style={{ border: '1px solid var(--line)', borderRadius: 8, padding: '8px 12px' }}>
      <div className="nc-grupo-h"><strong>Órdenes de lacado emitidas</strong>{rows && <span className="muted">· {rows.length}</span>}</div>
      {rows === null && <p className="muted">Cargando…</p>}
      {rows && !rows.length && <p className="muted">Todavía no hay órdenes de lacado.</p>}
      {grupos.map(([empresa, os]) => (
        <div key={empresa} style={{ marginBottom: 10 }}>
          <div style={{ fontWeight: 600, fontSize: 13, margin: '6px 0 4px' }}>{empresa}</div>
          <div className="tbl-wrap"><div className="tbl-scroll">
            <table className="tbl tbl-compact">
              <thead><tr><th>Orden</th><th>Fecha</th><th>Líneas</th><th>Recibidas</th><th>Creada por</th><th /></tr></thead>
              <tbody>
                {os.map((o) => (
                  <tr key={o.id} style={resaltar.includes(o.id) ? { background: 'var(--info-bg)' } : undefined}>
                    <td><OrdenLacadoLink id={o.id} numero={o.numero} onToast={onToast} /></td>
                    <td className="muted">{lacFecha(o.fecha)}</td>
                    <td className="num">{o.lineas}</td>
                    <td className="num">{o.recibidas === o.lineas && o.lineas ? <span className="pill ok"><span className="d" />Todas</span> : o.recibidas}</td>
                    <td className="muted">{o.creada_por || '—'}</td>
                    <td style={{ whiteSpace: 'nowrap', textAlign: 'right' }}>
                      <button className="btn ghost sm" onClick={() => lacAbrirPdf(o.id).catch(err)} title="Abrir para imprimir"><Icon name="download" size={12} /> PDF</button>
                      <button className="btn ghost sm" onClick={() => lacExcel(o.id).catch(err)}><Icon name="download" size={12} /> Excel</button>
                    </td>
                  </tr>
                ))}
              </tbody>
            </table>
          </div></div>
        </div>
      ))}
    </div>
  );
};

window.lacAbrirPdf = lacAbrirPdf;
window.OrdenLacadoLink = OrdenLacadoLink;
window.OrdenesLacadoPanel = OrdenesLacadoPanel;
