/* ============================================================
   PCP — Máquinas: cadastro de equipamentos.

   O custo de hora e o consumo de energia alimentam o cálculo de preço do
   Orçamento e da tela de Produtos. O cadastro fica em Configurações e no
   próprio Orçamento (botão "Nova"), sem tela dedicada.
   (shares global scope; useState etc. from ui.jsx)
   ============================================================ */

const MAQ_STATUS = {
  ativa:       { label: "Ativa", tone: "ok" },
  manutencao:  { label: "Em manutenção", tone: "warn" },
  inativa:     { label: "Inativa", tone: undefined },
};

// ---------------- Cadastro de máquina ----------------
function NovaMaquinaForm({ app, onClose, edit, onCreated }) {
  const [f, setF] = useState(() => ({
    nome: edit ? edit.nome || "" : "",
    tipo: edit ? edit.tipo || "" : "",
    marca: edit ? edit.marca || "" : "",
    modelo: edit ? edit.modelo || "" : "",
    status: edit ? edit.status || "ativa" : "ativa",
    custoHora: edit && edit.custoHora != null ? edit.custoHora : "",
    consumoEnergiaKwh: edit && edit.consumoEnergiaKwh != null ? edit.consumoEnergiaKwh : "",
    obs: edit ? edit.obs || "" : "",
  }));
  const set = (k) => (e) => setF({ ...f, [k]: e.target.value });

  const submit = () => {
    const nome = f.nome.trim();
    if (!nome) return app.toast("Informe o nome da máquina", "crit");
    const repetida = (app.maquinas || []).some((m) => m.nome.trim().toLowerCase() === nome.toLowerCase() && (!edit || m._id !== edit._id));
    if (repetida) return app.toast("Já existe uma máquina com esse nome", "crit");
    const payload = {
      nome, tipo: f.tipo.trim(), marca: f.marca.trim(), modelo: f.modelo.trim(),
      status: f.status,
      custoHora: +f.custoHora || 0, consumoEnergiaKwh: +f.consumoEnergiaKwh || 0,
      obs: f.obs.trim(),
    };
    const criada = edit ? app.maquinasApi.update(edit._id, payload) : app.maquinasApi.add(payload, true);
    app.logEvento && app.logEvento(edit ? "editar_maquina" : "criar_maquina", nome);
    onClose();
    app.toast(edit ? "Máquina atualizada" : "Máquina cadastrada", "ok", { sub: nome, icon: "zap" });
    if (!edit && onCreated) onCreated(criada);
  };

  return (
    <Modal size="md" icon="zap" title={edit ? "Editar máquina" : "Nova máquina"}
      sub="Equipamento usado nas etapas de produção" onClose={onClose}
      footer={<><span className="spacer" /><Btn onClick={onClose}>Cancelar</Btn>
        <Btn variant="primary" icon="check" onClick={submit}>{edit ? "Salvar alterações" : "Salvar máquina"}</Btn></>}>
      <div className="field-grid c2" style={{ marginBottom: 14 }}>
        <Field label="Nome" req><input className="fld" autoFocus value={f.nome} onChange={set("nome")} placeholder="Ex.: Impressora 3D 01" /></Field>
        <Field label="Tipo" opt><input className="fld" value={f.tipo} onChange={set("tipo")} placeholder="Impressora 3D, CNC, Laser…" /></Field>
      </div>
      <div className="field-grid c2" style={{ marginBottom: 14 }}>
        <Field label="Marca" opt><input className="fld" value={f.marca} onChange={set("marca")} placeholder="Creality" /></Field>
        <Field label="Modelo" opt><input className="fld" value={f.modelo} onChange={set("modelo")} placeholder="Ender 3 V3" /></Field>
      </div>
      <Field label="Situação">
        <select className="fld" value={f.status} onChange={set("status")}>
          {Object.keys(MAQ_STATUS).map((k) => <option key={k} value={k}>{MAQ_STATUS[k].label}</option>)}
        </select>
      </Field>
      <div className="form-sec">Custo operacional</div>
      <div className="field-grid c2" style={{ marginBottom: 14 }}>
        <Field label="Custo de hora" help="depreciação + manutenção, por hora de uso — usado no Orçamento">
          <div className="fld-wrap"><span className="pre">R$</span><input className="fld" type="number" step="0.01" min="0" value={f.custoHora} onChange={set("custoHora")} placeholder="0,00" /><span className="pre">/h</span></div>
        </Field>
        <Field label="Consumo de energia" opt help="média em kWh por hora de operação">
          <div className="fld-wrap"><input className="fld right" type="number" step="0.01" min="0" value={f.consumoEnergiaKwh} onChange={set("consumoEnergiaKwh")} placeholder="0,00" /><span className="pre">kWh/h</span></div>
        </Field>
      </div>
      <Field label="Observações" opt><textarea className="fld" rows={3} value={f.obs} onChange={set("obs")} placeholder="Bico 0,4mm · manutenção a cada 300h…" /></Field>
    </Modal>
  );
}

// ---------------- Apontamento manual de uso ----------------

if (window.MODALS) window.MODALS.novaMaquina = NovaMaquinaForm;
Object.assign(window, { NovaMaquinaForm, MAQ_STATUS });
