import * as plugins from '../plugins.js';

import * as interfaces from './index.js';
import { DockerNetwork } from '../classes.network.js';
import { DockerSecret } from '../classes.secret.js';
import { DockerImage } from '../classes.image.js';

/**
 * Service creation descriptor supporting both string references and class instances.
 * Strings will be resolved to resources internally.
 */
export interface IServiceCreationDescriptor {
  name: string;
  /** Image tag (string) or DockerImage instance */
  image: string | DockerImage;
  labels: interfaces.TLabels;
  /** Network names (strings) or DockerNetwork instances */
  networks: (string | DockerNetwork)[];
  networkAlias: string;
  /** Secret names (strings) or DockerSecret instances */
  secrets: (string | DockerSecret)[];
  ports: string[];
  accessHostDockerSock?: boolean;
  resources?: {
    memorySizeMB?: number;
    volumeMounts?: plugins.tsclass.container.IVolumeMount[];
  };
}
