#!/bin/bash

# Started by AICoder, pid:p068fk44bfj8c1c14e380a9c802bd56800c53543

function usage() {
    echo "Usage: $0 [Options1]"
    echo "Usage: $0 [Options2] <rpm package path>"
    echo "Usage: $0 [Options2] [Options3] <rpm package path>"
    echo "Options1:"
    echo "  -h|--help       Show the usage"
    echo "Options2:"
    echo "  --eth-kernel    Install rpm packages with zxdh-eth"
    echo "  --dpdk          Install rpm packages with zxdh-eth zxdh-npsdk"
    echo "  --rdma          Install rpm packages with zxdh-eth zxdh-rdma"
    echo "  --sda           Install rpm packages with zxdh-sda"
    echo "  --neo           Install rpm packages with zxdh-eth zxdh-npsdk zxdh-smartnic-config"
    echo "  --neo-host      Install rpm packages with zxdh-eth zxdh-npsdk zxdh-dpu-config zxdh-zf-mpf"
    echo "Options3:"
    echo "  --force         Install rpm packages with a lower version"
    exit 1
}


declare -A option_packages_map
option_packages_map=(["--eth-kernel"]="zxdh-eth"
                    ["--dpdk"]="zxdh-eth zxdh-npsdk"
                    ["--rdma"]="zxdh-eth zxdh-rdma"
                    ["--sda"]="zxdh-sda"
                    ["--ovs-card"]="zxdh-eth zxdh-npsdk zxdh-smartnic-config"
                    ["--neo"]="zxdh-eth zxdh-npsdk zxdh-dpu-config zxdh-zf-mpf"
                    ["--neo-host"]="zxdh-hpf"
                   )


# Define a function to install a specified RPM package.
function install_package {
    local package=$1
    local force=$2
    if [ "$force" = true ]; then
        echo "Force installing $package..."
        rpm -Uvh --force $package
    else
        echo "Installing $package..."
        rpm -Uvh $package

    fi
}


# Parse options.
empty_option=false
help_option=false
install_option=false
force_option=false

if [ -z "$1" ]; then
    empty_option=true
else
    while [[ $# -gt 0 ]]; do
        key="$1"
        case $key in
            -h|--help)
                help_option=true
                break;
                ;;
            --eth-kernel|--dpdk|--rdma|--sda|--ovs-card|--neo|--neo-host)
                option_packages=${option_packages_map[$key]}
                install_option=true
                shift
                ;;
            --force)
                force_option=true
                shift
                ;;

            *)
                rpm_packages_path="$key"
                shift
                ;;
        esac
    done
fi


# Show help
if [[ "$help_option" = true || "$empty_option" = true ]]; then
    usage;
    exit 0
fi


if [ "$install_option" = false ]; then
    echo "Error: Invalid install options provided."
    usage
    exit 0
else
    if [ -z "$rpm_packages_path" ]; then
        echo "Error: Rpm packages path is empty, please input."
        exit 0
    fi
fi


# To install the rpm packages corresponding to the option
if [ -n "$option_packages" ] && [ -n "$rpm_packages_path" ]; then
    for package in $option_packages; do
        # Match all rpm files with the current package name in the directory
        for pkg in $(ls $rpm_packages_path/$package*.rpm); do
            install_package $pkg $force_option
        done
    done
fi


# Ended by AICoder, pid:p068fk44bfj8c1c14e380a9c802bd56800c53543
