#!/bin/bash
# LinuxGSM compress_unreal_maps.sh module
# Author: Daniel Gibbs
# Contributors: https://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Compresses unreal and unreal2 resources.

commandname="MAP-COMPRESSOR"
commandaction="Compressing Maps"
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
fn_firstcommand_set

check.sh
fn_print_header
echo -e "Will compress all maps in:"
echo -e ""
pwd
echo -e ""
echo -e "Compressed maps saved to:"
echo -e ""
echo -e "${compressedmapsdir}"
echo -e ""
totalseconds=3
for seconds in {3..1}; do
	fn_print_warn "map compression starting in: ${totalseconds}"
	totalseconds=$((totalseconds - 1))
	fn_sleep_time_1
	if [ "${seconds}" == "0" ]; then
		break
	fi
done
fn_print_nl
mkdir -pv "${compressedmapsdir}" > /dev/null 2>&1

# List of extensions to compress
exts=(ut2 kfm rom u ucl upl int utx uax ukx usx unr umx umod uzx)

# Remove old compressed files using find
for ext in "${exts[@]}"; do
	mapfile -t oldfiles < <(find "${serverfiles}" -name "*.${ext}.uz2" -type f)
	if [ ${#oldfiles[@]} -gt 0 ]; then
		echo -e "found ${#oldfiles[@]} old compressed file(s) to remove for extension: ${ext}"
	fi
	for file in "${oldfiles[@]}"; do
		if rm -f "$file"; then
			echo -en "removing file [ ${italic}$(basename "$file")${default} ]\c"
			fn_print_ok_eol_nl
		else
			echo -en "removing file [ ${italic}$(basename "$file")${default} ]\c"
			fn_print_fail_eol_nl
		fi
	done
done

cd "${systemdir}" || exit

# Find and compress files, then move .uz2 to compressedmapsdir
for ext in "${exts[@]}"; do
	# Collect all files with the current extension into an array
	mapfile -t files < <(find "${serverfiles}" -name "*.${ext}" -type f)
	for file in "${files[@]}"; do
		echo -en "compressing file [ ${italic}$(basename "$file") -> $(basename "$file").uz2${default} ]\c"
		if ! ./ucc-bin compress "${file}" --nohomedir > /dev/null 2>&1; then
			fn_print_fail_eol_nl
			core_exit.sh
		else
			fn_print_ok_eol_nl
		fi

		if ! mv -f "${file}.uz2" "${compressedmapsdir}" > /dev/null 2>&1; then
			echo -en "moving compressed file [ ${italic}$(basename "$file").uz2 -> ${compressedmapsdir}/$(basename "$file").uz2${default} ]\c"
			fn_print_fail_eol_nl
			core_exit.sh
		fi
	done
done

fn_print_ok_nl "Compression complete: All compressed files moved to: ${compressedmapsdir}"

core_exit.sh
