#!/bin/bash -e -o pipefail
################################################################################
##  File:  install-dotnet.sh
##  Desc:  Install dotnet
################################################################################

source ~/utils/utils.sh

export DOTNET_CLI_TELEMETRY_OPTOUT=1

arch=$(get_arch)

# Download installer from dot.net and keep it locally
DOTNET_INSTALL_SCRIPT="https://dot.net/v1/dotnet-install.sh"
install_script_path=$(download_with_retry $DOTNET_INSTALL_SCRIPT)
chmod +x $install_script_path

args_list=()
echo "Parsing dotnet SDK (except rc and preview versions) from .json..."

dotnet_versions=($(get_toolset_value ".dotnet.arch[\"$arch\"].versions | .[]"))

for dotnet_version in ${dotnet_versions[@]}; do
    release_url="https://raw.githubusercontent.com/dotnet/core/main/release-notes/${dotnet_version}/releases.json"
    releases_json_file=$(download_with_retry "$release_url")

    if [[ $dotnet_version == "6.0" ]]; then
        args_list+=(
            $(cat $releases_json_file | jq -r 'first(.releases[].sdks[]?.version | select(contains("preview") or contains("rc") | not))')
        )
    else
        args_list+=(
            $(cat $releases_json_file | \
            jq -r '.releases[].sdk."version"' | grep -v -E '\-(preview|rc)\d*' | \
            sort -r | rev | uniq -s 2 | rev)
        )
    fi
done

for ARGS in ${args_list[@]}; do
    $install_script_path --version $ARGS -NoPath --arch $arch
done

# dotnet installer doesn't create symlink to executable in /user/local/bin
# Moreover at that moment /user/local/bin doesn't exist (though already added to $PATH)
ln -s ~/.dotnet/dotnet /usr/local/bin/dotnet

# Validate installation
if [[ $(dotnet --list-sdks | wc -l) -lt "1" ]]; then
    echo "The .NET Core SDK is not installed"
    exit 1
fi

echo 'export PATH="$PATH:$HOME/.dotnet/tools"' >> $HOME/.bashrc
echo "Dotnet operations have been completed successfully..."

invoke_tests "Common" ".NET"
