#!/bin/bash

# Function to check for internet connectivity
check_internet_connection() {
    if ping -q -c 1 8.8.8.8 &>/dev/null; then
        echo "Internet connection is active."
        return 0
    else
        echo "No internet connection. Please check your network settings."
        return 1
    fi
}


dependencies=(
    "liblog4cpp5-dev"
    "libgstreamer1.0-dev"
    "libgstreamer-plugins-base1.0-dev"
    "libgstreamer-plugins-bad1.0-dev"
    "gstreamer1.0-plugins-base"
    "gstreamer1.0-plugins-good"
    "gstreamer1.0-plugins-bad"
    "gstreamer1.0-plugins-ugly"
    "gstreamer1.0-libav"
    "gstreamer1.0-tools"
    "gstreamer1.0-x"
    "gstreamer1.0-alsa"
    "gstreamer1.0-gl"
    "gstreamer1.0-gtk3"
    "gstreamer1.0-qt5"
    "gstreamer1.0-pulseaudio"
    "build-essential"
    "bison"
    "flex"
    "libglib2.0-dev"
    "libmosquittopp-dev"
    "libgps-dev"
    "libusb-1.0-0"
    "libusb-1.0-0-dev"
    "libasound2-dev"
    "qtcreator"
    "qt5-default"
    "qtdeclarative5-dev"
    "qtpositioning5-dev"
    "qtlocation5-dev"
    "libqt5serialport5-dev"
    "qml-module-qtquick-controls2"
    "libssl-dev"
    "libtag1-dev"
    "libgps-dev"
    "libpulse-dev"
    # Add more dependencies as needed
)


timestamp_timeout=60 sudo -v

# Function to check and install a package using apt-get
install_package() {
    package_name="$1"
    if dpkg -s "$package_name" &> /dev/null ; then
        echo -e "\nPackage $package_name is already installed."
        return 0  # Package is already installed, return success
    else
        if [ "$show_logs" = true ]; then
            echo -e "\nInstalling $package_name..."
            sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "$package_name"
            echo "Installed $package_name."
        else
            echo -e "\nInstalling $package_name..."
            # Redirect stdout to /dev/null to suppress normal output
            sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "$package_name" > /dev/null
            echo "done."
        fi
        # Check the exit code of the apt-get command to determine if there was an error
        if [ $? -eq 0 ]; then
            return 0  # Package installed successfully, return success
        else
            return 1  # Error installing package, return failure
        fi
    fi
}

# Function to display the progress bar
show_progress() {
    local percent=$((installed_count * 100 / total_dependencies))
    local progress=$((installed_count * progress_width / total_dependencies))
    local bar=""
    for ((i = 0; i < progress; i++)); do
        bar+="="
    done
    printf "\r[%-${progress_width}s] %d%% (%d/%d)" "$bar" "$percent" "$installed_count" "$total_dependencies"
}

# Process command line arguments
show_logs=false
while getopts ":l" opt; do
    case $opt in
        l)
            show_logs=true
            ;;
        \?)
            echo "Invalid option: -$OPTARG" >&2
            exit 1
            ;;
    esac
done

# Check for internet connection before proceeding
if ! check_internet_connection; then
    exit 1
fi

# Update the package list and install dependencies
# sudo apt-get update

total_dependencies=${#dependencies[@]}
installed_count=0
progress_width=50

# Clear the terminal before showing the progress bar
# printf "\033c"

# Install each dependency using apt-get
for package in "${dependencies[@]}"; do
    install_package "$package"
    if [ $? -eq 0 ]; then
        installed_count=$((installed_count + 1))
    fi
    show_progress
    sleep 0.5  # Adjust the sleep time if needed to control the progress bar update speed
done

# Print a newline after the progress bar is complete to avoid overlapping text
echo

echo "All dependencies have been installed successfully!"
