#!/usr/bin/env bash
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2026 Bryan Joshua Pedini

# fake dpkg-query (unit tests): the dpkg database dump used for dependency closures, and
# `-W -f '${db:Status-Abbrev}' NAME` (the status of one package; purged = unknown to dpkg)
# shellcheck source=../fakelib.bash
. "${BASH_SOURCE[0]%/*}/../fakelib.bash"
fake_log "$@"
# FAKE_STATE_APPEND / FAKE_STATE_SED: simulate another process writing the statefile meanwhile
st=${SKEPTICAL_UPDATER_STATE_DIR:-}/trusted.tsv
if [[ -n ${FAKE_STATE_APPEND:-} ]]; then printf '%s\n' "$FAKE_STATE_APPEND" >>"$st"; fi
if [[ -n ${FAKE_STATE_SED:-} ]]; then sed -i "$FAKE_STATE_SED" "$st"; fi
args=" $* "
names=()
while (($#)); do
	case $1 in
	-f) shift ;;
	-*) ;;
	*) names+=("$1") ;;
	esac
	shift
done
if ((${#names[@]})); then
	rc=0
	for n in "${names[@]}"; do
		st=$(awk -F'\t' -v n="${n%:amd64}" '$2 == n { print $1; exit }' "$FAKE_DATA/apt/dpkg-status.tsv")
		if [[ -z $st ]] || fake_purged "${n%:amd64}"; then
			echo "dpkg-query: no packages found matching $n" >&2
			rc=1
			continue
		fi
		printf '%s' "$st"
	done
	exit "$rc"
fi
case $args in
*' -W '*) cat "$FAKE_DATA/apt/dpkg-status.tsv" ;;
*)
	echo "fake dpkg-query: unhandled: $*" >&2
	exit 99
	;;
esac
