import type { InjectionKey } from 'vue';

import type { UploadEditContext, UploadEditDraft } from '#/api/onlineDev/uploadEdit';

export interface UploadEditParticipant {
  settle?: () => Promise<void>;
  refresh?: () => Promise<void>;
  prepare: () => Promise<undefined | { contentToken?: string; metadataToken?: string; draftId: string; revision: number }>;
}
export interface UploadEditFormContext {
  context: () => Omit<UploadEditContext, 'field' | 'parentField' | 'rowId'>;
  register: (participant: UploadEditParticipant) => () => void;
  loadShared?: (context: UploadEditContext) => Promise<{ data: UploadEditDraft }>;
  sharedChanged?: () => void;
}
export const uploadEditFormKey: InjectionKey<UploadEditFormContext> = Symbol('upload-edit-form');
