#!/bin/sh

DOCKER_NAME=${DOCKER_NAME:-odroid/odroid-stamper}
DOCKER_TAG=${DOCKER_TAG:-"latest"}
DOCKER_PULL=false
DOCKER_CMD="docker run --rm"

USER_ID=${USER_ID:-$(id -u)}
GROUP_ID=${GROUP_ID:-$(id -g)}

FLAVOUR=${FLAVOUR:-server}
PASSWORD=${PASSWORD:-odroid}
USERNAME=${USERNAME:-odroid}
OTHERS=""

usage() {
	echo "Usage: $(basename $0) [options] --board=BOARD --codename=CODENAME"
	echo
	echo "  --board=BOARD          Target ODROID board name"
	echo "  --codename=CODENAME    Target Debian/Ubuntu release series"
	echo
	echo "Options:"
	echo "  --compress             Compress the final OS image using 'xz'"
	echo "  --flavour=FLAVOUR      Target OS image type (default: server)"
	echo "  --help                 Show this help message and exit"
	echo "  --kernel=KERNEL        Linux kernel package name (ex: 6.1.0-odroid-arm64)"
	echo "  --localversion=STRING  String to append to the final image filename"
	echo "  --password=PASSWORD    Password for the default user (default: odroid}"
	echo "  --username=USERNAME    Name of the default user account (default: odroid)"
	echo
	echo "Reporting & Formats:"
	echo "  --filelist             Generate a full file list report (.filelist)"
	echo "  --manifest             Generate an installed package list (.manifest)"
	echo "  --split-image          Create standalone images for each partition (BOOT and rootfs)"
	echo
	echo "Docker options:"
	echo "  --pull                 Always attempt to pull a newer version of the Docker image"
	exit 1
}

for opt in "$@"; do
	case $opt in
		--board=*)		BOARD="${opt#*=}";;
		--codename=*)		CODENAME="${opt#*=}";;
		--compress)		OTHERS="${OTHERS},--compress";;
		--filelist)             OTHERS="${OTHERS},--filelist";;
		--flavour=*)		FLAVOUR="${opt#*=}";;
		--help)			usage;;
		--kernel=*)		KERNEL="${opt#*=}";;
		--localversion=*)	OTHERS="${OTHERS},--localversion=${opt#*=}";;
		--manifest)             OTHERS="${OTHERS},--manifest";;
		--password=*)		PASSWORD="${opt#*=}";;
		--split-image)		OTHERS="${OTHERS},--split-image";;
		--pull)			DOCKER_PULL=true;;
		--username=*)		USERNAME="${opt#*=}";;
	esac
done

if [ "x${DOCKER_PULL}" = "xtrue" ]; then
	DOCKER_CMD="${DOCKER_CMD} --pull always"
fi

${DOCKER_CMD} --privileged -it \
	-v $PWD:/home/ubuntu \
        -v ${HOME}/.ssh:/home/ubuntu/.ssh \
	-v /var/cache:/var/cache \
	-e USER_ID=${USER_ID} \
	-e GROUP_ID=${GROUP_ID} \
	-e KERNEL=${KERNEL} \
	-e BOARD=${BOARD} \
	-e CODENAME=${CODENAME} \
	-e FLAVOUR=${FLAVOUR} \
	-e USERNAME=${USERNAME} \
	-e PASSWORD=${PASSWORD} \
	-e OTHERS="${OTHERS}" \
	${DOCKER_NAME}:${DOCKER_TAG}
