#!/usr/bin/env bash

set -e

MINIKUBE_VERSION=${MINIKUBE_VERSION:-v1.9.2}

PREFIX_DIR=/usr/local
BIN_DIR=${PREFIX_DIR}/bin

MINIKUBE_PREFIX_DIR=${PREFIX_DIR}/apps/minikube
MINIKUBE_DEST_DIR=${MINIKUBE_PREFIX_DIR}/${MINIKUBE_VERSION}
MINIKUBE_CURRENT=${MINIKUBE_PREFIX_DIR}/current

if [[ $(uname) =~ Linux ]]; then
    OS=linux
elif [[  $(uname) =~ Darwin ]]; then
    OS=darwin
else
    echo "unsupported os: $(uname)"
    exit 1
fi

ARCH=
if [[ $(uname -m) == x86_64 ]]; then
    ARCH=amd64
else
    echo arch not yet supported: "$(uname -m)"
    exit 1
fi

TMP_DIR=
if [[ ! -d ${MINIKUBE_DEST_DIR} ]]; then
    sudo mkdir -p "${MINIKUBE_DEST_DIR}"
    TMP_DIR=$(mktemp --directory)
    DEST_FILE="${TMP_DIR}"/minikube
    URL="https://github.com/kubernetes/minikube/releases/download/${MINIKUBE_VERSION}/minikube-${OS}-${ARCH}"
    echo downloading minikube "${MINIKUBE_VERSION}" to temp directory "${TMP_DIR}"
    curl --silent --location --output "${DEST_FILE}" "${URL}"

    sudo chmod 755 "${DEST_FILE}"
    sudo mv "${DEST_FILE}" "${MINIKUBE_DEST_DIR}"
    sudo chown --recursive root:root "${MINIKUBE_DEST_DIR}"
else
    echo minikube "${MINIKUBE_VERSION}" already installed
fi

cd "${MINIKUBE_PREFIX_DIR}"
[[ -s current ]] && sudo unlink current
sudo ln --symbolic "${MINIKUBE_VERSION}"/ current
echo current version set to "${MINIKUBE_VERSION}"
cd ${BIN_DIR}
[[ -L ${BIN_DIR}/minikube ]] || sudo ln --symbolic ${MINIKUBE_CURRENT}/minikube

if [[ $TMP_DIR != "" ]]; then
    rm -rf "${TMP_DIR}"
    echo removed up temp directory "${TMP_DIR}"
fi