#!/bin/bash
# Author: Sys4
# Licence: GPLv3

# Script pour automatiser la création de la carte de nalc

strip() {
	echo "$1" | cut -d \' -f 2
}

verif() {
	if [ $? -gt 0 ]; then
		echo "Erreur ! Arrêt du script."
		exit 1
	fi
}

error() {
	if [ -n "$1" ]; then
		echo "ERREUR : $1 !"
	else
		echo "ERREUR : paramètres invalides !" >&2
		echo "utilisez l'option -h pour en savoir plus" >&2
	fi
	exit 1
}

usage() {
	echo "Usage : ./genmap.sh [-h|--help] server_path worldname destination_path"
	echo "Génère la carte de nalc vers le fichier destination_path/nalc_map.png"
}

action() {
	[ -z "$1" ] && error "Argument manquant"
	local serverpath=$(strip "$1")
	[ ! -d "$serverpath" ] && error "Le répertoire $serverpath n'existe pas"

	[ -z "$2" ] && error "Nom du world manquant"
	local world_name=$(strip "$2")

	local world="$serverpath/minetest/worlds/$world_name"
	[ ! -d "$world" ] && error "Le répertoire $world n'existe pas"

	[ -z "$3" ] && error "Chemin de destination manquant"
	local destination=$(strip "$3")
	[ ! -d "$destination" ] && error "Le répertoire $destination n'existe pas"

	[ ! -d "$serverpath/minetestmapper" ] && error "minetestmapper ne semble pas installé"
	[ ! -d "$serverpath/leaftest" ] && error "leaftest ne semble pas installé"
	[ ! -e "$serverpath/colors.txt" ] && error "$serverpath/colors.txt manquant"

	# Copie du dossier leaftest vers /tmp puis on l'exécute de là
	local config="$serverpath/minetest/minetest.conf"
	local workdir=$(mktemp -d "/tmp/minetest-mapper.XXXXXXXXX")
	local spawn=$(grep "^static_spawnpoint" "$config" | tr -d " " | cut -f 2 -d "=");
	local spawnx=$(cut -f 1 -d "," <<<$spawn)
	local spawnz=$(cut -f 3 -d "," <<<$spawn)
	local mapsize=12288

	cp -a "$serverpath/leaftest" $workdir
	cp "$serverpath/colors.txt" $workdir/leaftest

	pushd $workdir/leaftest

	MAPPERDIR="$serverpath/minetestmapper" \
			 MAPPERPARAMS="--colors $serverpath/colors.txt \
			  --min-y -25 --max-y 300" \
			 JOBNUM=$(nproc) \
			 $workdir/leaftest/mapper.sh "$world" $spawnx,$spawnz $mapsize

	# Copie de leaftest vers le dossier web distant normalement déjà monté
	rm -rf "$destination/$world_name"
	cp -rL $workdir/leaftest/www "$destination/$world_name"
	popd

	rm -rf $workdir
}

# Pas de paramètre
[[ $# -lt 1 ]] && usage

# -o : Options courtes
# -l : Options longues
options=$(getopt -o h -l help -- "$@")

# Éclatement de $options en $1, $2...
set -- $options

while true; do
	case "$1" in
		-h|--help)
			usage
			exit 0;;
		--)
			shift;;
		*)
			action $1 $2 $3
			exit 0
			shift;;
	esac
done

exit 0