# vim:set ft=sh:

SHORTNAME=quake3
LONGNAME="Quake III Arena"

POINTFILE=linuxq3apoint-1.32b-3.x86.run
Q3MIRRORFILE=/etc/game-data-packager/quake3-mirrors
IDMIRRORFILE=/etc/game-data-packager/idstuff-mirrors

if [ "$0" = "./game-data-packager" ]; then
    Q3MIRRORFILE="./etc/quake3-mirrors"
    IDMIRRORFILE="./etc/idstuff-mirrors"
fi

quake3_usage() {
echo "quake3 game arguments:"
printf "\tmountpoint - Quake III Arena CD mount-point or baseq3/pak0.pk3 filename\n"
printf "\tpoint release - ${POINTFILE}\n"
}

get_mirror () {
    (
        if [ -s "${Q3MIRRORFILE}" ]; then
            grep -v '^#' "${Q3MIRRORFILE}"
        fi
        grep -v '^#' "${IDMIRRORFILE}" | sed 's#$#/quake3/linux#'
    ) | sort -R | head -n1
}

parse_args() {
    if   [ $# -eq 1 ] && [ -f ${IDMIRRORFILE} ]; then
        CDROM="$1"
        POINT="false"
    elif [ $# -eq 2 ]; then
        CDROM="$1"
        POINT="$2"
    else
		usage >&2
        quake3_usage >&2
        exit 1
    fi
}

fetch_point_release() {

    if [ "x$POINT" != xfalse ]; then
        cp -p "$POINT" "$WORKDIR/$POINTFILE"
	return
    fi

    if ! mirror=`get_mirror`; then
        echo "${POINTFILE} or a download mirror in $Q3MIRRORFILE or $IDMIRRORFILE is required" >&2
        exit 1
    fi

    wget -O $WORKDIR/$POINTFILE $mirror/$POINTFILE
}

find_pak0() {
    # identify where pak0.pk3 is (underneath the CD-ROM mount-point)
    # and set the relevant variable

    if [ -f "$CDROM" ] && [ "${CDROM%pak0.pk3}" != "$CDROM" ]; then
        PAKFILE="$CDROM"
    elif   [ -f "$CDROM/Quake3/baseq3/pak0.pk3" ]; then
        PAKFILE="$CDROM/Quake3/baseq3/pak0.pk3"
    elif [ -f "$CDROM/baseq3/pak0.pk3" ]; then
        PAKFILE="$CDROM/baseq3/pak0.pk3"
    else
        PAKFILE=`find "$CDROM" -type f -name "pak0.pk3" | head -1`
    fi
    if [ "" = "$PAKFILE" ]; then
        echo "couldn't find pak0.pk3 under $CDROM." >&2
        exit 1
    fi
    cp -p "$PAKFILE" "$WORKDIR/pak0.pk3"
}

# TODO: roll a more advanced check_sums into the game-package-shared
check_sums() {
    POINTMD5=c71fdddccb20e8fc393d846e9c61d685
    SUM=`md5sum "$WORKDIR/$POINTFILE" | cut -d' ' -f1`
    if [ "$SUM" != "$POINTMD5" ]; then
        echo "error: $POINTFILE sum ($SUM) does not match expected sum" >&2
        echo "($POINTMD5)" >&2
        exit 1
    fi

    PAK0MD5=1197ca3df1e65f3c380f8abc10ca43bf
    SUM=`md5sum $WORKDIR/pak0.pk3 | cut -d' ' -f1`
    if [ "$SUM" != "$PAK0MD5" ]; then
        echo "error: pak0.pk3 sum ($SUM) does not match expected sum" >&2
        echo "($PAK0MD5)" >&2
        exit 1
    fi
}

unpack_point() {
    mkdir "$WORKDIR/unpacked"
    (
        cd "$WORKDIR/unpacked"
        dd if=$WORKDIR/$POINTFILE ibs=1 obs=1024 skip=8251 |
            tar zxf -
    )
    # now interested in $WORKDIR/unpacked/baseq3/pak[1-8].pk3
}

DEBBASE="${SHORTNAME}-data_${GAME_PACKAGE_VERSION}_all.deb"
BASEQ3=/usr/share/games/quake3/baseq3

DEB="$DATADIR/$DEBBASE"

go() {
	parse_args $*
    fetch_point_release
    find_pak0
    check_sums
    unpack_point

    DEST="${BASEQ3#/}"

    # smcv FIXME: copied from lib/doom-common
    if [ "" = "$OUTDIR" ]; then
        OUTFILE="$WORKDIR/out.deb"
    else
        OUTFILE=`unravel "$OUTDIR"`"/$DEBBASE"
    fi
    # smcv FIXME: end

    cp -p "$DEB" "$OUTFILE"
    slipstream "$OUTFILE" "$DEST" pak0.pk3 \
    	unpacked/baseq3/pak1.pk3 \
    	unpacked/baseq3/pak2.pk3 \
    	unpacked/baseq3/pak3.pk3 \
    	unpacked/baseq3/pak4.pk3 \
    	unpacked/baseq3/pak5.pk3 \
    	unpacked/baseq3/pak6.pk3 \
    	unpacked/baseq3/pak7.pk3 \
    	unpacked/baseq3/pak8.pk3

    rm -fr $WORKDIR/unpacked
    rm -f $WORKDIR/pak0.pk3 $WORKDIR/linuxq3apoint-1.32b-3.x86.run
}


