#!/usr/bin/env bash
set -e

function setup() {
	local elixir_ls_home=${LOCAL_SRC_HOME}/elixir-ls
	local elixir_ls_release=${elixir_ls_home}/release
	echo "elixir-ls repo"
	cd ${elixir_ls_home}
	echo "checkout versions ${1}"
	git checkout tags/${1}
	echo "set erlang/elixir versions"
	cp .release-tool-versions .tool-versions
	if [[ ! -z "$2" ]]; then
		echo "override erlang to ${2}"
		sed -i "s/erlang .*/erlang ${2}/g" .tool-versions
	fi
	if [[ ! -z "$3" ]]; then
		echo "override elixir to ${3}"
		sed -i "s/elixir .*/elixir ${3}/g" .tool-versions
	fi
	local current_erlang=$(mise current erlang)
	local current_elixir=$(mise current elixir)
	echo "using erlang ${current_erlang} / elixir ${current_elixir}"
	echo "install erlang/elixir runtimes"
	KERL_CONFIGURE_OPTIONS="-with-ssl=${HOME}/.local/lib/ssl" mise install
	echo "install elixir-ls deps"
	mise exec erlang@${current_erlang} elixir@${current_elixir} --command "mix do local.rebar --force, local.hex --force, deps.get, deps.compile"
	echo "compile and release elixir-ls"
	mise exec erlang@${current_erlang} elixir@${current_elixir} --command "MIX_ENV=prod mix compile"
	mise exec erlang@${current_erlang} elixir@${current_elixir} --command "MIX_ENV=prod mix elixir_ls.release -o ${elixir_ls_release}/${1}"
	echo "remove local .tool-versions"
	cp .tool-versions ${elixir_ls_release}/${1}
	rm .tool-versions
	mise exec erlang@${current_erlang} elixir@${current_elixir} --command "mix do deps.clean --all, clean"
	git checkout master
}

setup $1 $2 $3