#!/usr/bin/env bash

# TODO: Rename to something more fitting.

rdo_header run

rdo_run() {
  local cmd="${1}"; shift || :

  case "${cmd}" in
    init)
      rdo_run_init "${@}"
      ;;
    --help|-h|'')
      echo "Usage: do run COMMAND"
      echo
      echo "Run commands in containers"
      echo
      echo "Commands"
      echo "  exec  Foo"
      echo
      echo "Run 'do run COMMAND --help' for more information on a command."
      ;;
    *)
      print_error "unknown run command: ${@}"
      return 1
      ;;
  esac
}

rdo_run_init() {
  local arg_rebuild=

  while true; do
    case "${1}" in
      --rebuild)
        arg_rebuild="yes"
        shift ;;
      --help|-h|'')
        echo "Initialize container"
        echo
        echo "Options:"
        echo "      --rebuild  Create new container"
        echo
        echo "Run 'rdo run init --help' for more information on a command."
        return
        ;;
      *)
        rdo__args__check_unknown_flag rdo_run_init "${@}" && break || exit 1
        ;;
    esac
  done

  local image_tag="${1:?Missing image tag argument.}"
  local image_id="$(rdo__image_id__tag "${image_tag}")"

  if [[ -z "${image_id}" ]]; then
    print_error "no such image: ${image_tag}"
    return 1
  fi

  # make this a flag, return hash
  local container_name="${2:?Missing container name argument.}"
  local container_id="$(rdo__container_id__name "${container_name}")"

  if [[ -n "${container_id}" ]] &&
       ([[ "${arg_rebuild}" == "yes" ]] || [[ -z "$(rdo__running_container_id__name "${container_name}")" ]]); then
    print_progress "removing old container ${container_name}"
    docker rm -f "${container_id}"
    container_id=
  fi

  if [[ -n "${container_id}" ]]; then
    print_progress "using container ${container_name}"
    echo "${container_id}"
    return
  fi

  local project_data_path
  project_data_path="$(rdo__project_absolute_unix_path)/data"

  print_progress "starting build container ${container_name} with data path ${project_data_path}"

  docker run --detach --name "${container_name}" \
         --volume "${project_data_path}:/data" \
         "${image_id}" sleep 100000
}
