import { Resources, RestartPolicy } from 'docker-types';

import axios, { parseAxiosError } from '@/portainer/services/axios/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';

import { withAgentTargetHeader } from '../../proxy/queries/utils';
import { buildDockerProxyUrl } from '../../proxy/queries/buildDockerProxyUrl';

/**
 * UpdateConfig holds the mutable attributes of a Container.
 * Those attributes can be updated at runtime.
 */
interface UpdateConfig extends Resources {
  // Contains container's resources (cgroups, ulimits)
  RestartPolicy?: RestartPolicy;
}

/**
 * Raw docker API proxy
 */
export async function updateContainer(
  environmentId: EnvironmentId,
  containerId: string,
  config: UpdateConfig,
  { nodeName }: { nodeName?: string } = {}
) {
  try {
    await axios.post<{ Warnings: string[] }>(
      buildDockerProxyUrl(environmentId, 'containers', containerId, 'update'),
      config,
      { headers: { ...withAgentTargetHeader(nodeName) } }
    );
  } catch (err) {
    throw parseAxiosError(err, 'failed updating container');
  }
}
