#!/usr/bin/env bash

# Logging function
log() {
    printf "$(tput setaf 4)$(tput bold)>>>>> %s <<<<<$(tput sgr0)\n" "$1"
}

inf() {
    printf "$(tput setaf 2)╚═══ᐳ $(tput sgr 0 1)$(tput setaf 2)%s$(tput sgr0)\n" "$1"
}

err() {
    printf "$(tput setaf 9)$(tput bold)>>>>> %s ! <<<<<$(tput sgr0)\n" "$1"
}

install_binary() {
    ##
    # Simple abstraction to install a binary using a supported package manager
    # Example usage:
    # install_binary "fzf"
    # install_binary "fzf" "dnf"

    local package_name="${1}"
    local package_manager="${2}"

    # Function to determine the package manager if not specified
    determine_package_manager() {
        if [ command -v apt-get &>/dev/null ]; then
            echo "apt-get"
        elif [ command -v pamac &>/dev/null ]; then
            echo "pamac"
        elif [ command -v yay &>/dev/null ]; then
            echo "yay"
        elif [ command -v pacman &>/dev/null ]; then
            echo "pacman"
        else
            err "No supported package manager found."
            exit 1
        fi
    }

    # If the package manager is not specified, determine it
    if [[ -z "${package_manager}" ]]; then
        package_manager=$(determine_package_manager)
    fi

     # Install the package using the determined or specified package manager
     inf "installing ${package_name} using ${package_manager}..."

    case "${package_manager}" in
    apt-get)
        sudo apt-get install --yes --no-install-recommends --ignore-missing --fix-broken -qq "${package_name}" || {
            err "Installation failed."
            exit 1
        }
        ;;
    pacman)
        sudo pacman -S --needed --noconfirm --quiet "${package_name}" || {
            err "Installation failed."
            exit 1
        }
        ;;
    pamac)
        sudo pamac --no-confirm "${package_name}" || {
            err "Installation failed."
            exit 1
        }
        ;;
    yay)
        yay -S --noconfirm --removemake --quiet "${package_name}" || {
            err "Installation failed."
            exit 1
        }
        ;;
    *)
        err "Unsupported package manager: ${package_manager}"
        exit 1
        ;;
    esac
    inf "installation of ${package_name} completed successfully."
}


