#!/usr/bin/env bash

PACKAGE_BASE_URL=$1
if [ -z "$PACKAGE_BASE_URL" ]; then
    PACKAGE_BASE_URL="https://passport-packages.manage.rackspace.com"
fi

hasCli() {
    has=$(which passport)

    if [ "$?" = "0" ]; then
        echo
        echo "You already have the Passport CLI installed!"
        export n=1
        echo "Overwriting in $n seconds.. Press Control+C to cancel."
        echo
        sleep $n
    fi

    hasCurl=$(which curl)
    if [ "$?" = "1" ]; then
        echo "You need curl to use this script."
        exit 1
    fi
}

getPackage() {
    uname=$(uname)
    userid=$(id -u)
    system="linux"

    case $uname in
    "Darwin")
    system="osx"
    ;;
    "Linux")
    system="linux"
    ;;
    esac

    INSTALLATION_DIRECTORY=$(mktemp -d /tmp/passport.XXXXX)
    BINARY_PATH="$INSTALLATION_DIRECTORY/passport"
    CHECKSUM_PATH="$INSTALLATION_DIRECTORY/SHA256SUMS"

    echo "Downloading Passport CLI to $INSTALLATION_DIRECTORY..."

    INSTALLER_URL="$PACKAGE_BASE_URL/releases/LATEST/$system/passport"
    curl -fsSL $INSTALLER_URL --output $BINARY_PATH

    if [ "$?" != "0" ]; then
        echo "Failed to download Passport CLI from $INSTALLER_URL"
        exit 1
    fi

    CHECKSUM_URL="$PACKAGE_BASE_URL/releases/LATEST/$system/SHA256SUMS"
    curl -fsSL $CHECKSUM_URL --output $CHECKSUM_PATH

    if [ "$?" != "0" ]; then
        echo "Failed to download Passport SHA256 checksum from $CHECKSUM_URL"
        exit 1
    fi

    echo "Download complete."

    chmod +x $BINARY_PATH
    which sha256sum > /dev/null

    if [ "$?" = "0" ]; then
        PWD=$(pwd)
        cd $INSTALLATION_DIRECTORY
        sha256sum -c --quiet SHA256SUMS
        rc=$?
        cd $PWD

        if [ "$rc" != "0" ]; then
            echo "Failed to verify SHA256 checksum for Passport CLI"
            exit 1
        fi
    else
        echo "Unable to verify SHA256 checksum for Passport CLI. sha256sum is not installed. Continuing..."
    fi

    if [ "$userid" != "0" ]; then

        echo
        echo "========================================================="
        echo "==    As the script was run as a non-root user the     =="
        echo "==    following commands may need to be run manually   =="
        echo "========================================================="
        echo
        echo "  sudo cp $BINARY_PATH /usr/local/bin/passport"
        echo

    else

        echo
        echo "Running as root - Attempting to move passport to /usr/local/bin"

        mv $BINARY_PATH /usr/local/bin/passport

        if [ "$?" = "0" ]; then
            echo "New version of passport installed to /usr/local/bin"
        fi

        if [ -e $INSTALLATION_DIRECTORY ]; then
            rm -r $INSTALLATION_DIRECTORY
        fi

        passport
    fi
}

hasCli
getPackage
