#!/usr/bin/env bash

set -uexo pipefail

script_home="$(cd "$(dirname "$0")" && pwd)"

default=openjdk10

cmdname="$(basename "$0")"

usage() { echo "Usage: $cmdname (oraclejdk10|openjdk10|default|...) INSTALLDIR_IF_NEEDED"; }

misuse() { usage 1>&2; exit 2; }

# Commit of the install-jdk.sh script, and its sha256 hash
commit_sha=01d412b27d444f12dd8a1d0b0003ac94ed582539
known_hash=1dfeb99d8d9485cebde8838d5456fb35de01167a2ecd02bcae4a93ad81023a2a

test "$#" -eq 2 || misuse

ver="$1"
if test "$ver" = default; then
    ver="$default"
fi

jdkver="${ver##*jdk}"
jdktype="${ver%%jdk*}"

case "$jdktype" in
    oracle) licensetype=BCL ;;
    open) licensetype=GPL ;;
    *)
        echo "$cmdname does not know how to install jdk type '$jdktype'"
        exit 2
        ;;
esac

install="$2"
cache_flag="$install/jdk/jdk-$commit_sha"

if test -e "$cache_flag" -a -e "$install/jdk/bin"; then
  # Correct java version is cached
  exit 0
fi

# Clear a previous install, if it exists
rm -r "$install/jdk" || true

tmpdir="$(mktemp -d "$cmdname-XXXXXX")"
tmpdir="$(cd "$tmpdir" && pwd)"
trap "$(printf 'rm -rf %q' "$tmpdir")" EXIT

curl -so "$tmpdir/install-jdk.sh" "https://raw.githubusercontent.com/sormuras/bach/$commit_sha/install-jdk.sh"
obshash="$("$script_home/sha256sum" < "$tmpdir/install-jdk.sh" | cut -d' ' -f1)"

if test "$obshash" != "$known_hash"; then
    echo "$cmdname: sha256sum $obshash != $known_hash" 1>&2
    exit 2
fi

chmod +x "$tmpdir/install-jdk.sh"
mkdir -p "$install"

"$tmpdir/install-jdk.sh" --emit-java-home -f "$jdkver" -l "$licensetype" --target "$install/jdk"

# The unpatched version of openjdk10 does not contain the cacert that signed clojars
rm "$install/jdk/lib/security/cacerts"
ln -s /etc/ssl/certs/java/cacerts "$install/jdk/lib/security/cacerts"

touch "$cache_flag"
