#! /bin/sh

rootdir="$(readlink -f "$1")"
archivedir="$(readlink -f "$2")"
baseurl="$3"
shift; shift; shift

PKGSURL="${baseurl}/PACKAGES.TXT?${RANDOM}${RANDOM}${RANDOM}"
PATCHPKGSURL="${baseurl}/patches/PACKAGES.TXT?${RANDOM}${RANDOM}${RANDOM}"
PKGSFILE="${archivedir}/$(echo "${baseurl}" | md5sum | awk '{ print $1 }')-PACKAGES.TXT"
PATCHPKGSFILE="${archivedir}/$(echo "${baseurl}" | md5sum | awk '{ print $1 }')-PATCHES-PACKAGES.TXT"
if [ ! -f "${PKGSFILE}" ]; then
	wget -O "${PKGSFILE}" -o /dev/null "${PKGSURL}" >/dev/null 2>/dev/null
	wget -O "${PATCHPKGSFILE}" -o /dev/null "${PATCHPKGSURL}" >/dev/null 2>/dev/null
fi

for pkg in "$@"; do
	# Check the patches archive for the package first...
	pkgurl=""
	if [ -f "${PATCHPKGSFILE}" ]; then
		pkgurl="$(grep -A1 "PACKAGE NAME:  ${pkg}-[^-]*-[^-]*-[^-]*\.tgz" "${PATCHPKGSFILE}" | sed 's@^.*:  *@@' | tac | head -n 2 | tr "\n" '/' | sed 's@/*$@@')"
	fi

	# If not found, check the main archive...
	if [ -z "${pkgurl}" ]; then
		pkgurl="$(grep -A1 "PACKAGE NAME:  ${pkg}-[^-]*-[^-]*-[^-]*\.tgz" "${PKGSFILE}" | sed 's@^.*:  *@@' | tac | head -n 2 | tr "\n" '/' | sed 's@/*$@@')"
	fi

	# If still not found, skip...
	if [ -z "${pkgurl}" ]; then
		echo "Unable to fetch package: \"$pkg\", skipping" >&2
		continue
	fi
	pkgurl="${baseurl}/${pkgurl}"

	pkgfile="${archivedir}/$(basename "${pkgurl}")"
	pkgname="$(basename "${pkgfile}" | sed 's@\.tgz$@@')"
	if [ ! -f "${pkgfile}" ]; then
		echo "Fetching ${pkgname} ..."
		wget -O "${pkgfile}" -o /dev/null "${pkgurl}"
	fi

	echo "Installing ${pkgname} ..."
	bin/installpkg_chroot "${rootdir}" "${pkgfile}"
done
