# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI=5

CDROM_OPTIONAL="yes"
inherit eutils cdrom unpacker games

GOG_FILE="gog_duke_nukem_3d_atomic_edition_2.0.0.8.sh"
DESCRIPTION="Duke Nukem 3D data files"
HOMEPAGE="http://www.3drealms.com/"
SRC_URI="gog? ( ${GOG_FILE} )"

LICENSE="DUKE3D gog? ( GOG-EULA )"
SLOT="0"
KEYWORDS="amd64 hppa ppc x86"
IUSE="gog"
REQUIRED_USE="^^ ( cdinstall gog )"
RESTRICT="mirror bindist gog? ( fetch )"

RDEPEND="|| ( games-fps/eduke32 games-fps/duke3d )"
DEPEND="gog? ( app-arch/unzip )"

S=${WORKDIR}

pkg_nofetch() {
	einfo "Please download ${GOG_FILE} from your GOG.com account after buying Duke Nukem 3d"
	einfo "and put it into ${DISTDIR}."
}

src_unpack() {
	if use cdinstall ; then
		export CDROM_NAME_SET=(
			"Existing Install"
			"Duke Nukem 3D CD"
			"Duke Nukem 3D Atomic Edition CD"
			)
		cdrom_get_cds duke3d.grp:dvd/dn3dinst/duke3d.grp:atominst/duke3d.grp

		if [[ ${CDROM_SET} -ne 0
			&& ${CDROM_SET} -ne 1
			&& ${CDROM_SET} -ne 2 ]]
		then
			die "Error locating data files.";
		fi
	else
		unpack_zip "${DISTDIR}"/${GOG_FILE}
		cd data/noarch/data || die

		# convert to lowercase
		find . -type f \
			-execdir sh -c 'echo "converting ${1} to lowercase"
			lower="`echo "${1}" | tr [:upper:] [:lower:]`"
			[ "${1}" = "${lower}" ] || mv "${1}" "${lower}"' - {} \;
	fi
}

src_install() {
	local DATAROOT

	insinto "${GAMES_DATADIR}"/duke3d

	if use cdinstall ; then
		case ${CDROM_SET} in
		0) DATAROOT="" ;;
		1) DATAROOT="dn3dinst/" ;;
		2) DATAROOT="atominst/" ;;
		esac

		# avoid double slash
		doins "${CDROM_ROOT}"/${DATAROOT}{duke3d.grp,duke.rts,game.con,user.con,demo?.dmo,defs.con}
	else
		doins data/noarch/data/{duke3d.grp,duke.rts,game.con,user.con,demo?.dmo,defs.con}
	fi

	prepgamesdirs
}
