#!/usr/bin/env bash
set -Eeuo pipefail

thisDir="$(dirname "$(readlink -f "$BASH_SOURCE")")"
source "$thisDir/.constants.sh" \
	--flags 'deb-src' \
	-- \
	'[--deb-src] <target-dir> <suite> <mirror> <secmirror> [checkmirror checksecmirror]' \
	'rootfs stretch http://deb.debian.org/debian http://security.debian.org/debian-security
rootfs stretch http://deb.debian.org/debian http://security.debian.org/debian-security http://snapshot.debian.org/archive/debian/20170508T000000Z http://snapshot.debian.org/archive/debian-security/20170508T000000Z'

eval "$dgetopt"
debSrc=
while true; do
	flag="$1"; shift
	dgetopt-case "$flag"
	case "$flag" in
		--deb-src) debSrc=1 ;;
		--) break ;;
		*) eusage "unknown flag '$flag'" ;;
	esac
done

targetDir="${1:-}"; shift || eusage 'missing target-dir'
suite="${1:-}"; shift || eusage 'missing suite'
mirror="${1:-}"; shift || eusage 'missing mirror'
secmirror="${1:-}"; shift || eusage 'missing secmirror'
checkmirror="${1:-}"; shift || :
checksecmirror="${1:-}"; shift || :
[ -n "$targetDir" ]

comp='main'
arch="$("$thisDir/.dpkg-arch.sh" "$targetDir")"

deb() {
	local mirror="$1"; shift
	local checkmirror="$1"; shift
	local suite="$1"; shift
	local comp="$1"; shift

	# http://snapshot.debian.org/archive/debian-archive/20160314T000000Z/debian/dists/squeeze-updates/main/binary-amd64/Packages.gz
	if ! wget --quiet --spider -O /dev/null -o /dev/null "${checkmirror:-$mirror}/dists/$suite/$comp/binary-$arch/Packages.gz"; then
		echo >&2 "warning: ${checkmirror:-$mirror} does not appear to support $suite/$comp on $arch; skipping"
		return
	fi

	#if [ -n "$checkmirror" ]; then
	#	echo "# deb $checkmirror $suite $comp"
	#fi
	echo "deb $mirror $suite $comp"
	if [ -n "$debSrc" ]; then
		echo "deb-src $mirror $suite $comp"
	fi
}

# https://github.com/tianon/go-aptsources/blob/e066ed9cd8cd9eef7198765bd00ec99679e6d0be/target.go#L16-L58
{
	case "$suite" in
		sid|unstable|testing)
			deb "$mirror" "$checkmirror" "$suite" "$comp"
			;;

		*)
			# https://salsa.debian.org/installer-team/apt-setup/tree/d7a642fb5fc76e4f0b684db53984bdb9123f8360/generators
			deb "$mirror" "$checkmirror"       "$suite"         "$comp" # "50mirror"
			deb "$secmirror" "$checksecmirror" "$suite/updates" "$comp" # "91security"
			deb "$mirror" "$checkmirror"       "$suite-updates" "$comp" # "92updates"
			# https://wiki.debian.org/SourcesList#Example_sources.list
			;;
	esac
} > "$targetDir/etc/apt/sources.list"
chmod 0644 "$targetDir/etc/apt/sources.list"

if [ ! -s "$targetDir/etc/apt/sources.list" ]; then
	echo >&2 "error: sources.list ended up empty -- something is definitely wrong"
	exit 1
fi
