#!/usr/bin/env bash

# =============================================================================
# convert_artwork.sh
# -----------------------------------------------------------------------------
# convert BD style artwork from static and template files to final artwork sets
# =============================================================================

ORIG_BASE_DIR="artwork"
ORIG_SND_DIR="sounds"
ORIG_MUS_DIR="music"

FILES_DIR="$ORIG_BASE_DIR/files"
BUILD_DIR="$ORIG_BASE_DIR/BUILD"

ARTWORK_TYPES="gfx snd mus"
ARTWORK_PREFIX_SET="krissz"
ARTWORK_PREFIX_ALL="ALL"

CONF_FILE_GIC_GAME="graphics/gic_game.conf"
CONF_FILES="$CONF_FILE_GIC_GAME"

GFX_SET_BOULDER_RUSH="gfx_krissz_boulder_rush"
SND_SET_BOULDER_DASH="snd_krissz_boulder_dash"
MUS_SET_BOULDER_DASH="mus_krissz_boulder_dash"

declare -A GFX_FILES_BOULDER_DASH=\
(							\
    ["_GFX_FILE_DEFAULT_"]="c64_gfx.png"		\
    ["_GFX_FILE_EDITOR_"]="c64_gfx_editor.png"		\
)

declare -A GFX_FILES_BOULDER_RUSH=\
(							\
    ["_GFX_FILE_DEFAULT_"]="boulder_rush.png"		\
    ["_GFX_FILE_EDITOR_"]="boulder_rush_editor.png"	\
)

declare -A GFX_FILES_BOULDER_RUSH_CWS=\
(							\
    ["_GFX_FILE_DEFAULT_"]="boulder_rush_cws.png"		\
    ["_GFX_FILE_EDITOR_"]="boulder_rush_cws_editor.png"	\
)

declare -A SND_FILES_MAPPING=\
(							\
    ["stone.ogg"]="stone_wall.wav"			\
    ["slime.ogg"]="slime_lava_replicator.wav"		\
    ["expanding_wall.ogg"]="SKIP"			\
    ["falling_wall.ogg"]="SKIP"				\
    ["lava.ogg"]="SKIP"					\
    ["replicator.ogg"]="SKIP"				\
)


# -----------------------------------------------------------------------------
# functions
# -----------------------------------------------------------------------------

# (none yet)

# -----------------------------------------------------------------------------
# main
# -----------------------------------------------------------------------------

if [ ! -d "$FILES_DIR" ]; then
    echo "ERROR: Source directory '$FILES_DIR' does not exist!"

    exit 10
fi

if [ -d "$BUILD_DIR" ]; then
    echo "ERROR: Target directory '$BUILD_DIR' already exists!"

    exit 10
fi

mkdir -p "$BUILD_DIR"

echo "Converting Krissz artwork to R'n'D artwork sets ..."

for TYPE in $ARTWORK_TYPES; do
    echo "- converting $TYPE sets ..."

    for LEVELSET_DIR in "$FILES_DIR/${TYPE}"_${ARTWORK_PREFIX_SET}_*; do
	SET=`basename "$LEVELSET_DIR"`

	echo "  * copying static files for artwork set '$SET' ..."

	if [ -d "$FILES_DIR/${TYPE}_${ARTWORK_PREFIX_ALL}" ]; then
	    rsync -a $FILES_DIR/${TYPE}_${ARTWORK_PREFIX_ALL}/ $BUILD_DIR/$SET/
	fi

	rsync -a "$LEVELSET_DIR" "$BUILD_DIR"
    done
done

echo "- converting sound files ..."

for SND_FILENAME_OGG in $ORIG_SND_DIR/*.ogg; do
    SND_BASENAME_OGG=`basename "$SND_FILENAME_OGG"`
    SND_BASENAME_WAV=${SND_FILES_MAPPING["$SND_BASENAME_OGG"]}
    SND_PREFIX=`echo "$SND_BASENAME_OGG" | sed -e "s/-.*//"`

    if [ "$SND_PREFIX" = "music" ]; then
        # skip music files

	continue
    fi

    if [ "$SND_BASENAME_WAV" = "SKIP" ]; then
	echo "  * skipping duplicate sound file '$SND_BASENAME_OGG' ..."

	continue
    fi

    if [ "$SND_BASENAME_WAV" = "" ]; then
	SND_BASENAME_WAV=`basename "$SND_FILENAME_OGG" ".ogg"`.wav
    fi

    SND_FILENAME_WAV="$BUILD_DIR/$SND_SET_BOULDER_DASH/sounds/$SND_BASENAME_WAV"

    echo "  * converting sound file '$SND_BASENAME_OGG' to '$SND_BASENAME_WAV' ..."

    ffmpeg -i "$SND_FILENAME_OGG" "$SND_FILENAME_WAV" 2> /dev/null

    if [ "$?" != "0" ]; then
	echo "ERROR: converting sound file '$SND_BASENAME_OGG' failed!"

	exit 10
    fi
done

echo "- converting music files ..."

for MUS_FILENAME_OGG in $ORIG_MUS_DIR/*.ogg; do
    MUS_BASENAME_OGG=`basename "$MUS_FILENAME_OGG"`
    MUS_BASENAME_MP3=`basename "$MUS_FILENAME_OGG" ".ogg"`.mp3
    MUS_PREFIX=`echo "$MUS_BASENAME_OGG" | sed -e "s/-.*//"`

    if [ "$MUS_PREFIX" != "music" ]; then
        # skip non-music files

	continue
    fi

    MUS_FILENAME_MP3="$BUILD_DIR/$MUS_SET_BOULDER_DASH/music/$MUS_BASENAME_MP3"

    echo "  * converting music file '$MUS_BASENAME_OGG' to '$MUS_BASENAME_MP3' ..."

    ffmpeg -i "$MUS_FILENAME_OGG" "$MUS_FILENAME_MP3" 2> /dev/null

    if [ "$?" != "0" ]; then
	echo "ERROR: converting music file '$MUS_BASENAME_OGG' failed!"

	exit 10
    fi
done

echo "- creating top-level config file ..."

cp -a "$FILES_DIR/levelinfo.conf" "$BUILD_DIR"

echo "Done"

exit 0
