// ─── Documento del expediente: Documentación médica ──────────────────────
// DocumentacionMedicaScreen: pantalla de solo-adjuntos (protocolos
// quirúrgicos, autorizaciones, estudios) — su guardado avanza el pipeline
// (REMITO → DOCUMENTACION_MEDICA) pero no crea un documento propio en una
// colección (no hay tabla `documentacion_medica`, solo observaciones sobre el
// expediente + archivos). Extraída de screens-docs.jsx en P7 junto con las
// otras 6 pantallas de documento. Expone a window:
// DocumentacionMedicaScreen. Consume window.resolveDocExp (screens/docs/
// compartido.jsx), DocumentShell/ObservacionesCard (ui/doc-kit-shell.jsx),
// FileUploadCard/useDocEdit/buildDocActions (ui/doc-kit-edit.jsx),
// avanzarEstado/persistirExpediente (dominio/expediente-docs.js),
// MicosAdjuntos (dominio/adjuntos.js — sube los adjuntos al bucket al guardar) y
// MicosStore (borra/renombra los adjuntos ya persistidos). DECISIÓN 10: la extracción
// IA va deshabilitada-honesta (extractDisabled).

function DocumentacionMedicaScreen({ expediente, onBack }) {
  const [tick, setTick] = React.useState(0); // fuerza re-render tras subir/borrar/renombrar adjuntos
  const exp = resolveDocExp(expediente);
  const archivos = exp.documentacionMedica || [];
  const isCreate = archivos.length === 0;
  const [toast, setToast] = React.useState(null);
  const uploaderRef = React.useRef(null); // DECISIÓN 9: captura los adjuntos pendientes de FileUploadCard

  const { editing, draft, enterEdit, discardEdit, saveEdit, patch } = useDocEdit(() => ({
    observaciones: exp.documentacionMedicaObservaciones || '',
  }), {
    startEditing: isCreate,
    onCancel: () => { if (isCreate) onBack(); },
    onSave: async (d) => {
      const live = (window.EXPEDIENTES || []).find((e) => e.id === exp.id) || exp;
      // DECISIÓN 9 — al GUARDAR el documento padre, los adjuntos de sesión suben al bucket
      // + se registran en `documentos` (tipo MEDICA, expediente_id = live.id). Si falla,
      // abortamos el guardado (sigue en edición) en vez de fingir éxito.
      const pend = uploaderRef.current ? uploaderRef.current.getPending() : [];
      if (pend.length && window.MicosAdjuntos) {
        try {
          await window.MicosAdjuntos.subir(pend, { tipo: 'MEDICA', expedienteId: live.id });
          uploaderRef.current.clearPending();
        } catch (err) {
          setToast('No se pudieron subir los archivos: ' + ((err && err.message) || 'error'));
          setTimeout(() => setToast(null), 5000);
          return false;
        }
      }
      live.documentacionMedicaObservaciones = d.observaciones || '';
      avanzarEstado(live, 'documentacionMedica');
      persistirExpediente(live);
      setToast('Documentación médica guardada');
      setTimeout(() => setToast(null), 3600);
    },
  });

  // Borrar/renombrar un adjunto YA persistido reusa MicosStore (soft-delete / PATCH del metadato).
  const borrarAdjunto = (idx) => {
    const f = archivos[idx];
    if (f && f.id && window.MicosStore) { window.MicosStore.remove('documentos', f.id); setTick((t) => t + 1); }
  };
  const renombrarAdjunto = (idx, nombre) => {
    const f = archivos[idx];
    if (f && f.id && window.MicosStore) { window.MicosStore.update('documentos', f.id, { nombre }); setTick((t) => t + 1); }
  };

  const actions = buildDocActions({ editing, enterEdit, discardEdit, saveEdit });

  return (
    <DocumentShell
      onBack={onBack}
      eyebrow="Documentación médica"
      statusLabel={editing ? 'Editando' : (archivos.length > 0 ? 'Cargada' : 'Pendiente')}
      statusPill="pill-doc-medica"
      bigId="DOC-MED"
      expedienteId={exp.publicId}
      editing={editing}
      isCreate={isCreate}
      toast={toast}
      actions={actions}
    >
      <FileUploadCard
        eyebrow="Documentos adjuntos"
        title="Estudios, partes quirúrgicos y autorizaciones"
        description="Subí los protocolos quirúrgicos, autorizaciones de obra social, estudios y demás documentación clínica del paciente."
        files={archivos}
        editing={editing}
        extractable
        extractDisabled
        realUpload
        persistTarget={{ tipo: 'MEDICA', expedienteId: exp.id }}
        onUploaderReady={(api) => { uploaderRef.current = api; }}
        onRemove={borrarAdjunto}
        onRename={renombrarAdjunto}
      />
      <ObservacionesCard
        editing={editing}
        value={editing ? draft.observaciones : (exp.documentacionMedicaObservaciones || '')}
        onChange={(v) => patch('observaciones', v)}
        placeholder="Notas clínicas, indicaciones del cirujano, observaciones sobre la documentación adjunta…"
      />
    </DocumentShell>
  );
}

Object.assign(window, { DocumentacionMedicaScreen });
