import * as logSymbols from 'log-symbols';
import { CliUsageError } from '@alwaysai/alwayscli';
import { AaiDevice } from '../../infrastructure';
import { targetHostnameCheckComponent } from './target-hostname-check-component';
import { RequiredWithYesMessage, echo } from '../../util';

export async function getTargetHostnameComponent(props: {
  yes: boolean;
  device: AaiDevice;
  targetHostname?: string;
}): Promise<string | undefined> {
  const { yes, device } = props;
  const targetHostname =
    device.host_name !== '' ? device.host_name : props.targetHostname;
  if (yes && !targetHostname) {
    throw new CliUsageError(RequiredWithYesMessage('hostname'));
  }
  if (device.host_name !== '' && props.targetHostname) {
    echo(`${logSymbols.warning} Input for targetHostname will be ignored.`);
  }
  if (device.mode === 'production') {
    // Support prompting for hostname for production (provisioned) devices only
    if (!targetHostname) {
      return await targetHostnameCheckComponent({
        prompt: true
      });
    }
  }
  await targetHostnameCheckComponent({
    targetHostname,
    prompt: false
  });
  return targetHostname;
}
