/* =====================================================================
   ModalForm (MForm) — Formulario generico de maestros (CRUD)
   Recibe via props: edt, modal, D, setEdt, setModal, saveForm
   ===================================================================== */

const MForm = ({ edt, setEdt, setModal, D, saveForm }) => {
  const [item, setItem] = useState(edt);
  const u = (k, v) => setItem(i => ({ ...i, [k]: v }));
  const t = item._t;
  const fm = {
    textiles: [["Código", "codigo"], ["Nombre", "nombre"], ["Proveedor", "proveedor", "select", "_proveedores"], ["Composición", "composicion"], ["Gramaje", "gramaje", "number"], ["Ancho cm", "ancho", "number"], ["Unidad", "unidad", "select", ["Metro", "Kilo", "Rollo"]], ["Precio", "precio", "number"], ["IVA %", "iva", "number"], ["Dcto PP %", "dctoPP", "number"], ["Dcto Vol %", "dctoVol", "number"], ["Vol Mín", "volMin", "number"], ["Días abast.", "diasAbast", "number"], ["Colores", "colores"], ["Ref. Prov.", "ref"], ["Estado", "estado", "select", ["Activo", "Inactivo"]]],
    insumos: [["Código", "codigo"], ["Nombre", "nombre"], ["Categoría", "cat", "select", CATS_INSUMO], ["Unidad", "unidad", "select", ["Unidad", "Metro", "Kilo", "Litro", "Rollo"]], ["Costo", "costo", "number"], ["IVA %", "iva", "number"], ["Proveedor", "proveedor", "select", "_proveedores"], ["Variante", "variante"]],
    tecnicas: [["Nombre", "nombre"], ["Unidad cobro", "unidadCobro", "select", UNIDADES_EST], ["Costo base", "costoBase", "number"], ["Proveedor", "proveedor", "select", "_proveedores"], ["Descripción", "desc"], ["Estado", "estado", "select", ["Activo", "Inactivo"]]],
    tiposPrenda: [["Código", "codigo"], ["Nombre", "nombre"], ["Categoría", "cat", "select", ["Superior", "Inferior", "Enterizo", "Accesorios"]], ["Descripción", "desc"], ["Consumo default (m)", "consumoDefault", "number"], ["Estado", "estado", "select", ["Activo", "Inactivo"]]],
    moldes: [["Código", "codigo"], ["Tipo prenda", "tipoPrenda"], ["Versión", "version"], ["Patronista", "patronista"], ["Escala", "escala"], ["Obs.", "obs"], ["Estado", "estado", "select", ["Activo", "Inactivo"]]],
    clientes: [["Tipo", "tipo", "select", ["Empresa", "Persona"]], ["Razón Social", "razon"], ["NIT", "nit"], ["Nombre Comercial", "comercial"], ["Contacto", "contacto"], ["Correo", "correo"], ["Teléfono", "tel"], ["Dirección", "dir"], ["Ciudad", "ciudad"], ["Dir. Facturación", "dirFactura"], ["Dir. Entrega", "dirEntrega"], ["Condiciones", "condiciones"], ["Estado", "estado", "select", ["Activo", "Inactivo"]]],
    proveedores: [["Nombre", "nombre"], ["NIT", "nit"], ["Contacto", "contacto"], ["Dirección", "direccion"], ["Ciudad", "ciudad"], ["Email", "email"], ["Celular", "celular"], ["Tipo", "tipo", "select", TIPOS_PROV], ["Estado", "estado", "select", ["Activo", "Inactivo"]]],
  };
  const fields = fm[t] || [];
  const titles = { textiles: "Textil", insumos: "Insumo", tecnicas: "Técnica", tiposPrenda: "Tipo de Prenda", moldes: "Molde", clientes: "Cliente", proveedores: "Proveedor" };
  const getOpts = (o) => o === "_proveedores" ? (D.proveedores || []).map(p => p.nombre) : (o || []);
  return (
    <div style={S.modal} onMouseDown={e => { if (e.target === e.currentTarget) { setModal(null); setEdt(null); } }}><div style={S.mc} onMouseDown={e => e.stopPropagation()}>
      <div style={{ display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: 14 }}><h2 style={{ margin: 0, color: "#0a2540", fontFamily: "Georgia,serif", fontSize: 16 }}>{item.id === 0 ? "Nuevo" : "Editar"} {titles[t]}</h2><button style={S.btn} onClick={() => saveForm(item)}><Ic name="check" size={13} /> Guardar</button></div>
      <div style={S.g2}>{fields.map(([l, k, tp, o]) => <F key={k} l={l}>{tp === "select" ? <select style={S.sel} value={item[k] || ""} onChange={e => u(k, e.target.value)}><option value="">—</option>{getOpts(o).map(x => <option key={x}>{x}</option>)}</select> : <input style={S.inp} type={tp || "text"} value={item[k] ?? ""} onChange={e => u(k, tp === "number" ? parseFloat(e.target.value) || 0 : e.target.value)} />}</F>)}</div>
    </div></div>
  );
};

// ── Exports a global scope (Babel standalone aisla cada <script>) ──
window.MForm = MForm;
