#!/usr/bin/env bash

# Dependencies: squashfs-tools or dwarfs

script_dir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"

# Supported compression algorithms: lz4, zstd, gzip, xz, lzo
# These are the algorithms supported by the integrated squashfuse
# However, your squashfs-tools (mksquashfs) may not support some of them
squashfs_compressor="lz4"
squashfs_compressor_arguments="-b 256K -comp ${squashfs_compressor} -Xhc"

# Use dwarfs instead of squashfs
dwarfs="false"
dwarfs_compressor_arguments="-l7 -C zstd:level=19 --metadata-compression null \
						-S 22 -B 3"

# Set to true to use an existing image if it exists
# Otherwise the script will always create a new image
use_existing_image="false"

image_path="${script_dir}"/image

bootstrap="${script_dir}"/root.x86_64

cd "${script_dir}" || exit 1

if [ "${dwarfs}" = "true" ]; then
	utils="utils_dwarfs.tar.gz"
else
	utils="utils.tar.gz"
fi

if [ ! -f "${utils}" ] || [ "$(wc -c < "${utils}")" -lt 1000 ]; then
	rm -f "${utils}"
	wget -q --show-progress "https://github.com/Kron4ek/Conty/raw/master/${utils}"
fi

if [ ! -f conty-start.sh ]; then
	echo "conty-start.sh is required!"
	exit 1
fi

# Check if selected compression algorithm is supported by mksquashfs
if [ "${dwarfs}" != "true" ] && command -v grep 1>/dev/null; then
	# mksquashfs writes its output to stderr instead of stdout
	mksquashfs &>mksquashfs_out.txt

	if [ ! "$(cat mksquashfs_out.txt | grep ${squashfs_compressor})" ]; then
		echo "Seems like your mksquashfs doesn't support the selected"
		echo "compression algorithm (${squashfs_compressor})."
		echo
		echo "Choose another algorithm and run the script again"

		exit 1
	fi

	rm -f mksquashfs_out.txt
fi

echo
echo "Creating Conty..."
echo

# Create the image
if [ ! -f "${image_path}" ] || [ "${use_existing_image}" != "true" ]; then
	if [ ! -d "${bootstrap}" ]; then
		echo "Distro bootstrap is required!"
		echo "Use the create-arch-bootstrap.sh script to get it"
		exit 1
	fi

	rm -f "${image_path}"
	if [ "${dwarfs}" = "true" ]; then
		if ! command -v mkdwarfs 1>/dev/null; then
			echo "Please install dwarfs and run the script again"
			exit 1
		fi

		mkdwarfs -i "${bootstrap}" -o "${image_path}" ${dwarfs_compressor_arguments}
	else
		if ! command -v mksquashfs 1>/dev/null; then
			echo "Please install squashfs-tools and run the script again"
			exit 1
		fi

		mksquashfs "${bootstrap}" "${image_path}" ${squashfs_compressor_arguments}
	fi
fi

# Combine the files into a single executable using cat
cat conty-start.sh "${utils}" "${image_path}" > conty.sh
chmod +x conty.sh

clear
echo "Conty created and ready to use!"