#!/usr/bin/env bash

rdo_header env

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

  case "${cmd}" in
    create)
      rdo_env_create "${@}"
      ;;
    --help|-h|'')
      echo "Usage: rdo env COMMAND"
      echo
      echo "Environment commands"
      echo
      echo "Commands"
      echo "  create   Create environment file"
      echo
      echo "Run 'rdo env COMMAND --help' for more information on a command."
      exit 1
      ;;
    *)
      print_error "rdo end: unknown command: ${@}"
      return 1
      ;;
  esac
}

rdo_env_create() {
  local arg_docker_machine=
  local arg_docker_type=
  local arg_repository="rdo"

  while [[ -n "${1}" ]]; do
    case "${1}" in
      --docker-machine)
        arg_docker_machine="${2:?Missing docker machine name.}"
        arg_docker_type="machine"
        shift 2 ;;
      --docker-engine)
        arg_docker_type="engine"
        shift ;;
      --help|-h)
        echo "Usage: rdo env create [OPTIONS]"
        echo
        echo "Create and manage rtorrent-docker environment"
        echo
        echo "Options:"
        echo "      --docker-machine  Use docker machine"
        echo
        echo "Run 'rdo env create --help' for more information on a command."
        exit 1
        ;;
      *)
        if [[ -z "${1##-*}" ]]; then
          echo "rdo env create: unknown parameter: ${1}" 2> /dev/null
          exit 1
        fi
        break
        ;;
    esac
  done

  local project_path="$(get_project_path)"

  if [[ -z "${project_path}" ]]; then
    print_error "docker context clean: could not get project path"
    exit 1
  fi

  if [[ -z "${arg_docker_type}" ]]; then
    print_error "create env: no docker type selected"
    exit 1
  fi

  cat > "${DATA_PATH}/env.bash" <<EOF
source ~/.bash_profile

update() {
  source "${project_path}/misc/docker.bash"
  source "${project_path}/misc/docker-machine.bash"
  source "${project_path}/misc/rtorrent-docker.bash"

  if [[ -f "${project_path}/data/env.engine" ]]; then
    source "${project_path}/data/env.engine"
  fi

  case "\${RDO_DOCKER_TYPE}" in
    machine)
      if [[ -f "${project_path}/data/env.machine" ]]; then
        source "${project_path}/data/env.machine"
      else
        echo "Missing '${project_path}/data/env.machine' file." >&2
      fi
      ;;
  esac
}

export PATH="${project_path}:\${PATH}"
export EXEC_PTY="$((command -v winpty) || (command -v console) || :)"

export RDO_BASH_SESSION="yes"
export RDO_DOCKER_TYPE="${arg_docker_type}"
EOF

  if [[ -n "${arg_docker_machine}" ]]; then
    cat >> "${DATA_PATH}/env.bash" <<EOF
export RDO_DOCKER_MACHINE="${arg_docker_machine}"

export PROMPT_COMMAND+="; PS1=\"<\\\${DOCKER_MACHINE_NAME}:\\\${DOCKER_CONTEXT}> \\\${PS1}\""
EOF
  else
    cat >> "${DATA_PATH}/env.bash" <<EOF

export PROMPT_COMMAND+="; PS1=\"<\\\${DOCKER_CONTEXT}> \\\${PS1}\""
EOF
  fi

  if [[ -n "${arg_repository}" ]]; then
    cat >> "${DATA_PATH}/env.bash" <<EOF
export RDO_REPOSITORY="${arg_repository}"
EOF
  fi

    cat >> "${DATA_PATH}/env.bash" <<EOF

update
EOF

  print_normal "created env.bash"
}
