import type { FieldReadSource, FieldScope, FieldVersionStatus } from '#/api/x/eln/fields';

export type FieldAction = 'disable' | 'enable' | 'promoteGlobal' | 'versions';
export type VersionAction = 'cancel' | 'copy' | 'edit' | 'preRelease' | 'publish' | 'setCurrent';

export function versionActions(input: { current: boolean; enabled: boolean; status: FieldVersionStatus }): VersionAction[] {
  if (!input.enabled) return input.status === 'DRAFT' || input.status === 'PRE_RELEASE' ? ['cancel'] : [];
  if (input.status === 'DRAFT') return ['edit', 'preRelease', 'cancel'];
  if (input.status === 'PRE_RELEASE') return ['publish', 'cancel', 'copy'];
  if (input.status === 'PUBLISHED') return input.current ? ['copy'] : ['setCurrent', 'copy'];
  return [];
}

export function fieldActions(input: { enabled: boolean; scope: FieldScope }): FieldAction[] {
  if (!input.enabled) return ['versions', 'enable'];
  const actions: FieldAction[] = ['versions'];
  if (input.scope === 'TEMPLATE') actions.push('promoteGlobal');
  actions.push('disable');
  return actions;
}

export function canUseBatchShared(input: { readSource: FieldReadSource }): boolean {
  return input.readSource === 'NONE';
}
