#!/usr/bin/env bash
#
# Print a list of files to download, formatted in one of three ways:
# - the files required to install package(s) and all their dependencies
#     (omitting any package that is already installed)
# - the files required to install package(s) and all their dependencies
#     (even dependencies that are already present on the system)
# - all files required to update your system
#
# version 1.0 by Johannes Winkelmann, maintained 2021--2024 by John McQuah

COMMAND=$(basename "$0")
MODE="onlymissing"
verbose="false"
args=()
while [ "$1" ]; do
    case "$1" in
	--all) MODE="all";;
	--diff) MODE="diff";;
	-v) verbose="true";;
	*) args+=("$1");;
    esac
    shift
done

if [ ${#args[*]} = 0 ] && [ "$MODE" != "diff" ]; then
    echo "Usage: $COMMAND        <port1> [<port2> ...]"
    echo "       $COMMAND --all  <port1> [<port2> ...]"
    echo "       $COMMAND --diff"
    exit 1
fi

mapfile -d" " -t list < <( case "$MODE" in
	diff) prt-get quickdiff ;;
	all) prt-get quickdep "${args[@]}" ;;
	onlymissing) prt-get depends "${args[@]}" | awk -v ORS=" " '/\[ / {print $3}' ;;
esac)

SRC_DEF="$(grep PKGMK_SOURCE_DIR /etc/pkgmk.conf | sed 's/PKGMK_SOURCE_DIR=/DL_DIR=/')"

for l in "${list[@]}"; do
    dir="$(prt-get path $l 2>/dev/null)" || continue;
    . "$dir/Pkgfile"
    eval "$SRC_DEF"
    for (( p=0; p<${#source[@]}; p++ )) ; do
    if [[ ${source[p]} =~ ^(http|ftp|https): ]]; then
        if [ "${renames[p]}" ] && [ "${renames[p]}" != "SKIP" ]; then
            FILE="${renames[p]}"
	    [ "$verbose" = "true" ] && source[p]+=" , saved as $FILE"
        else
            FILE="${source[p]##*/}"
        fi
        [ -e "${DL_DIR:-$dir}/$FILE" ] || echo "${source[p]}"
    fi
    done
done
