#!/usr/bin/with-contenv bash

# Determine if setup is needed
if [ -d /dotnet ]; then
    ARCH=$(uname -m)
    if [[ "${ARCH}" = "armv7l" ]]; then
        echo "**** The dotnet mod no longer supports arm32v7/armhf images, exiting ****"
        exit 0
    fi
    # install deps
    echo "**** Adding dotnet dependencies to package install list ****"
    source /etc/lsb-release
    if [ "${DISTRIB_CODENAME}" == "focal" ]; then
        echo "libicu66" >> /mod-repo-packages-to-install.list
    elif [ "${DISTRIB_CODENAME}" == "jammy" ]; then
        echo "libicu70" >> /mod-repo-packages-to-install.list
    elif [ "${DISTRIB_CODENAME}" == "noble" ]; then
        echo "libicu74" >> /mod-repo-packages-to-install.list
    fi
    # remove existing install if updating
    if ls -d /dotnet_* >/dev/null 2>&1; then
        echo "deleting" $(ls -d /dotnet_*)
        rm -rf /dotnet_*
    fi
    DOTNET_VERSIONS=$(cat /dotnet/versions.txt)
    for i in $DOTNET_VERSIONS; do
        mkdir -p "/dotnet_${i}"
        tar xzf "/dotnet/dotnetsdk_${i}.tar.gz" -C "/dotnet_${i}"
    done
    rm -rf /dotnet
    # symlink latest dotnet binary
    DOTNET_LATEST=$(echo "$DOTNET_VERSIONS" | awk '{print $1}')
    rm -rf /usr/local/bin/dotnet
    ln -s /dotnet_${DOTNET_LATEST}/dotnet /usr/local/bin/dotnet
    echo "
    ****************************************************
    ****************************************************
    **
    **
    DOTNET SDK versions installed:
    $(echo $DOTNET_VERSIONS | sed 's| |\n  |g')
    **
    **
    Binary locations are:"
    for i in $DOTNET_VERSIONS; do
        echo "  /dotnet_${i}/dotnet"
    done
    echo "  **
    **
    Version $DOTNET_LATEST is symlinked from /usr/local/bin/dotnet and can be called from anywhere via \"dotnet\"
    **
    **
    ****************************************************
    ****************************************************"
    # symlink other dotnet installs for access through latest binary
    for i in {2..5}; do
        DOTNET_OTHER_SDK_VERSION="$(echo $DOTNET_VERSIONS | awk -v var=${i} '{print $var}')"
        if [ -n "$DOTNET_OTHER_SDK_VERSION" ]; then
            DOTNET_OTHER_RUNTIME_VERSION="$(ls /dotnet_${DOTNET_OTHER_SDK_VERSION}/shared/Microsoft.NETCore.App)"
            echo "**** Symlinking sdk version ${DOTNET_OTHER_SDK_VERSION} and runtime version ${DOTNET_OTHER_RUNTIME_VERSION} ****"
            ln -s "/dotnet_${DOTNET_OTHER_SDK_VERSION}/shared/Microsoft.NETCore.App/${DOTNET_OTHER_RUNTIME_VERSION}" "/dotnet_${DOTNET_LATEST}/shared/Microsoft.NETCore.App/${DOTNET_OTHER_RUNTIME_VERSION}"
            ln -s "/dotnet_${DOTNET_OTHER_SDK_VERSION}/shared/Microsoft.AspNetCore.App/${DOTNET_OTHER_RUNTIME_VERSION}" "/dotnet_${DOTNET_LATEST}/shared/Microsoft.AspNetCore.App/${DOTNET_OTHER_RUNTIME_VERSION}"
            ln -s "/dotnet_${DOTNET_OTHER_SDK_VERSION}/sdk/${DOTNET_OTHER_SDK_VERSION}" "/dotnet_${DOTNET_LATEST}/sdk/${DOTNET_OTHER_SDK_VERSION}"
        else
            break
        fi
    done
else
    echo "**** Existing dotnet install is up to date, skipping ****"
fi
