// ─── Documento del expediente: Documentación extra ───────────────────────
// DocumentacionExtraScreen: pantalla de solo-adjuntos para documentación
// complementaria (convenios, autorizaciones especiales, comprobantes
// internos). No tiene estado propio en el pipeline (a diferencia de
// Documentación médica, guardar acá NO avanza `avanzarEstado`). Extraída de
// screens-docs.jsx en P7 junto con las otras 6 pantallas de documento. Expone
// a window: DocumentacionExtraScreen. Consume window.resolveDocExp (screens/
// docs/compartido.jsx), DocumentShell/ObservacionesCard (ui/doc-kit-
// shell.jsx), FileUploadCard/useDocEdit/buildDocActions (ui/doc-kit-
// edit.jsx), 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: extracción IA
// deshabilitada-honesta (extractDisabled).

function DocumentacionExtraScreen({ expediente, onBack, backLabel }) {
  const [tick, setTick] = React.useState(0); // fuerza re-render tras subir/borrar/renombrar adjuntos
  const exp = resolveDocExp(expediente);
  const archivos = exp.documentacionExtra || [];
  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.documentacionExtraObservaciones || '',
  }), {
    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, los adjuntos de sesión suben al bucket + `documentos`
      // (tipo EXTRA, expediente_id = live.id). Falla → abortamos el guardado.
      const pend = uploaderRef.current ? uploaderRef.current.getPending() : [];
      if (pend.length && window.MicosAdjuntos) {
        try {
          await window.MicosAdjuntos.subir(pend, { tipo: 'EXTRA', 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.documentacionExtraObservaciones = d.observaciones || '';
      persistirExpediente(live);
      setToast('Documentación extra 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}
      backLabel={backLabel || 'Volver al expediente'}
      eyebrow="Documentación extra"
      statusLabel={editing ? 'Editando' : (archivos.length > 0 ? 'Cargada' : 'Opcional')}
      statusPill="pill-doc-extra"
      bigId="DOC-EXTRA"
      expedienteId={exp.publicId}
      editing={editing}
      isCreate={isCreate}
      toast={toast}
      actions={actions}
    >
      <FileUploadCard
        eyebrow="Documentos adjuntos"
        title="Documentación complementaria"
        description="Adjuntá cualquier documentación adicional vinculada a este expediente — convenios, autorizaciones especiales, comprobantes internos, etc."
        files={archivos}
        editing={editing}
        extractable
        extractDisabled
        realUpload
        persistTarget={{ tipo: 'EXTRA', expedienteId: exp.id }}
        onUploaderReady={(api) => { uploaderRef.current = api; }}
        onRemove={borrarAdjunto}
        onRename={renombrarAdjunto}
      />
      <ObservacionesCard
        editing={editing}
        value={editing ? draft.observaciones : (exp.documentacionExtraObservaciones || '')}
        onChange={(v) => patch('observaciones', v)}
        placeholder="Notas sobre la documentación adicional adjunta…"
      />
    </DocumentShell>
  );
}

Object.assign(window, { DocumentacionExtraScreen });
