#!/bin/bash

#set -e

script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
current_dir="$(pwd)"

images_list=()

sudo chown -R $(id -u):$(id -g) "$current_dir"/builder/build

cd kasmweb
npm install
npm run build

cd "$current_dir"
cp -r kasmweb/dist "$current_dir"/builder/www

if [ -f /etc/nv_tegra_release ]; then
    NETWORK_FLAG="--network=host"
fi

for file in "$script_dir"/dockerfile.*.build; do
    if [[ "$file" == *.deb.build ]] || [[ "$file" == *.apk.build ]] || [[ "$file" == *.rpm.build ]] || [[ "$file" == *www* ]]; then
        continue
    fi

    [ -e "$file" ] || continue

    filename="$(basename "$file")"
    image_name=$(echo "$filename" | sed -E 's/^(dockerfile\.|Dockerfile\.)(.*)\.build$/\2/')

    if [ -e builder/build/kasmvnc."$image_name".tar.gz ]; then
        continue
    fi

    echo "Building docker image: $image_name using file: $file"

    rm -rf .cmake CMakeFiles build.ninja cmake_install.cmake cmake_uninstall.cmake CMakeCache.txt config.h
    rm -rf unix
    git checkout HEAD -- unix/

    docker build $NETWORK_FLAG -f "$file" -t "$image_name" "$current_dir"
    exit_code=$?
    if [ $exit_code -ne 0 ]; then
        echo "Build failed for $filename"
        break
    fi

    echo "Running container from image '$image_name'"
    # Run the container and capture the exit code
    docker run -it $NETWORK_FLAG  -v "$current_dir/builder/build":/build --device=/dev/dri:/dev/dri "$image_name"

    exit_code=$?

    echo "Container for image '$image_name' "
    if [ $exit_code -ne 0 ]; then
	      docker run -it $NETWORK_FLAG --entrypoint /bin/bash -u root -v "$current_dir/builder/build":/build --device=/dev/dri:/dev/dri "$image_name"

        echo "exited with error (exit code $exit_code)."
        break
    else
        echo "finished successfully."
        images_list+=("$image_name")
    fi
done

echo "Removing all built docker images..."
for img in "${images_list[@]}"; do
    echo "Removing docker image: $img"
    docker rmi -f "$img"
done
