#!/bin/bash

set -e

# Optional: Import test library
source dev-container-features-test-lib

check "python version 3.11 installed as default" bash -c "python --version | grep 3.11"
check "python3 version 3.11 installed as default" bash -c "python3 --version | grep 3.11"
check "python version 3.10.5 installed"  bash -c "ls -l /usr/local/python | grep 3.10.5"
check "python version 3.8 installed"  bash -c "ls -l /usr/local/python | grep 3.8"
check "python version 3.9.13 installed"  bash -c  "ls -l /usr/local/python | grep 3.9.13"

# Check paths in settings
check "current symlink is correct" bash -c "which python | grep /usr/local/python/current/bin/python"
check "current symlink works" /usr/local/python/current/bin/python --version

# check alternatives command
check_version_switch() {
    if type apt-get > /dev/null 2>&1; then
        PYTHON_ALTERNATIVES=$(update-alternatives --query python3 | grep -E 'Alternative:|Priority:')
        STYLE="debian"
    elif type dnf > /dev/null 2>&1 || type yum > /dev/null 2>&1 || type microdnf > /dev/null 2>&1; then
        PYTHON_ALTERNATIVES=$(alternatives --display python3 | grep " - priority")
        STYLE="fedora"
    else
        echo "No supported package manager found."
        exit 1
    fi
    AVAILABLE_VERSIONS=()
    INDEX=1
    echo "Available Python versions:"
    if [ "${STYLE}" = "debian" ]; then
        while read -r alt && read -r pri; do
            PATH=${alt#Alternative: }   # Extract only the path
            PRIORITY=${pri#Priority: }  # Extract only the priority number
            TEMP_VERSIONS+=("${PRIORITY} ${PATH}")
            echo "$INDEX) $PATH (Priority: $PRIORITY)"
            ((INDEX++))
        done <<< "${PYTHON_ALTERNATIVES}"
    elif [ "${STYLE}" = "fedora" ]; then
        export PATH="/usr/bin:$PATH"
        # Fedora/RHEL output: one line per alternative in the format:
        while IFS= read -r line; do
            # Split using " - priority " as a delimiter.
            PATH=$(/usr/bin/awk -F' - priority ' '{print $1}' <<< "$line" | /usr/bin/xargs /bin/echo)
            PRIORITY=$(/usr/bin/awk -F' - priority ' '{print $2}' <<< "$line" | /usr/bin/xargs /bin/echo)    
            TEMP_VERSIONS+=("${PRIORITY} ${PATH}") 
            echo "$INDEX) $PATH (Priority: $PRIORITY_VALUE)"
            ((INDEX++))
        done <<< "${PYTHON_ALTERNATIVES}"
    fi

    export PATH="/usr/bin:$PATH"   
    # Sort by priority (numerically ascending)
    IFS=$'\n' TEMP_VERSIONS=($(sort -n <<<"${TEMP_VERSIONS[*]}"))
    unset IFS

    # Populate AVAILABLE_VERSIONS from sorted data
    AVAILABLE_VERSIONS=()
    INDEX=1
    echo -e "\nAvailable Python versions (Sorted in asc order of priority):"
    for ENTRY in "${TEMP_VERSIONS[@]}"; do
        PRIORITY=${ENTRY%% *}  # Extract priority (first part before space)
        PATH=${ENTRY#* }       # Extract path (everything after first space)
        AVAILABLE_VERSIONS+=("${PATH}")
        echo "$INDEX) $PATH (Priority: $PRIORITY)"
        ((INDEX++))
    done

    echo -e "\nAvailable Versions Count: ${#AVAILABLE_VERSIONS[@]}\n"
    # Ensure at least 4 alternatives exist
    if [ "${#AVAILABLE_VERSIONS[@]}" -lt 4 ]; then
        echo "Error: Less than 4 Python versions registered in update-alternatives."
        exit 1
    fi

    export PATH="/usr/bin:$PATH"
    echo -e "\nSwitching to different versions using update-alternatives --set command...\n"
    for CHOICE in {1..4}; do
        SELECTED_VERSION="${AVAILABLE_VERSIONS[$((CHOICE - 1))]}"
        echo "Switching to: ${SELECTED_VERSION}"
        if command -v apt-get > /dev/null 2>&1; then
            /usr/bin/update-alternatives --set python3 ${SELECTED_VERSION}
        elif command -v dnf > /dev/null 2>&1 || command -v yum > /dev/null 2>&1 || command -v microdnf > /dev/null 2>&1; then
            /usr/sbin/alternatives --set python3 ${SELECTED_VERSION}
        fi
        # Verify the switch
        echo "Python version after switch:"
        /usr/local/python/current/bin/python3 --version
        /bin/sleep 1
        echo -e "\n"
    done
    echo -e "Update-Alternatives --display: \n"
    if type apt-get > /dev/null 2>&1; then
        /usr/bin/update-alternatives --display python3
    elif type dnf > /dev/null 2>&1 || type yum > /dev/null 2>&1 || type microdnf > /dev/null 2>&1; then
        /usr/sbin/alternatives --display python3
    fi
}

check "Version Switch With Update_Alternatives" check_version_switch