#!/usr/bin/env bash

# panama-power-profile reads and sets the system power profile.
#
# Runs against a stubbed busctl. The real daemon is a SYSTEM service shared with
# everything else on the machine, and a test that flipped the daily driver into
# power-saver and crashed before restoring would leave it there.
#
# The parsing is the fragile part. busctl renders the Profiles property flat:
#
#   v aa{sv} 3 2 "Profile" s "power-saver" "Driver" s "tuned" 2 "Profile" ...
#
# so profile names and driver names sit in the same stream. A pattern loose
# enough to match both reports the driver as an extra profile -- and on this
# machine the driver is literally called "tuned", which reads exactly like a
# plausible fourth profile.

set -uo pipefail

repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
helper="$repo_dir/config/dot/quickshell/scripts/panama-power-profile"

fail() {
    printf 'power profile contract: %s\n' "$1" >&2
    exit 1
}

stub_dir="$(mktemp -d /tmp/panama-power.XXXXXX)"
trap 'rm -rf "$stub_dir"' EXIT

cat >"$stub_dir/busctl" <<'STUB'
#!/usr/bin/env bash
# Records set-property calls so the test can assert what was written.
case "${1:-}" in
    status)
        [[ "${PANAMA_POWER_FAKE:-up}" == "down" ]] && exit 1
        exit 0 ;;
    get-property)
        case "${5:-}" in
            ActiveProfile)       printf 's "performance"\n' ;;
            PerformanceDegraded) printf 's "%s"\n' "${PANAMA_POWER_DEGRADED:-}" ;;
            Profiles)
                if [[ "${PANAMA_POWER_FAKE:-up}" == "empty" ]]; then
                    printf 'v aa{sv} 0\n'
                else
                    printf 'v aa{sv} 3 2 "Profile" s "power-saver" "Driver" s "tuned" 2 "Profile" s "balanced" "Driver" s "tuned" 2 "Profile" s "performance" "Driver" s "tuned"\n'
                fi ;;
        esac
        exit 0 ;;
    set-property)
        printf '%s\n' "${!#}" >>"$PANAMA_POWER_SET_LOG"
        exit 0 ;;
esac
exit 0
STUB
chmod +x "$stub_dir/busctl"

export PANAMA_POWER_SET_LOG="$stub_dir/sets.log"
: >"$PANAMA_POWER_SET_LOG"

run() { PATH="$stub_dir:$PATH" "$helper" "$@"; }

# ── Parsing ──────────────────────────────────────────────────────────────────
out="$(run list)"
jq -e . >/dev/null 2>&1 <<<"$out" || fail "list did not emit JSON: $out"

[[ "$(jq -r '.profiles | length' <<<"$out")" == "3" ]] \
    || fail "expected exactly three profiles; a fourth usually means the Driver value was parsed as one: $out"

jq -e '.profiles == ["power-saver", "balanced", "performance"]' >/dev/null <<<"$out" \
    || fail "profiles were parsed wrongly or reordered: $out"

jq -e '.profiles | index("tuned") == null' >/dev/null <<<"$out" \
    || fail 'the driver name "tuned" was reported as a profile'

[[ "$(jq -r '.active' <<<"$out")" == "performance" ]] \
    || fail "the active profile was not read: $out"

# ── Degradation is surfaced, since it makes the active profile a lie ─────────
out="$(PANAMA_POWER_DEGRADED="lap-detected" run list)"
[[ "$(jq -r '.degraded' <<<"$out")" == "lap-detected" ]] \
    || fail "a degraded performance state was not reported: $out"

# ── Setting ──────────────────────────────────────────────────────────────────
run set balanced
[[ "$(tail -1 "$PANAMA_POWER_SET_LOG")" == "balanced" ]] \
    || fail "set did not write the requested profile: $(cat "$PANAMA_POWER_SET_LOG")"

before="$(wc -l <"$PANAMA_POWER_SET_LOG")"
run set 'evil; rm -rf /' 2>/dev/null
[[ "$(wc -l <"$PANAMA_POWER_SET_LOG")" == "$before" ]] \
    || fail 'a profile name with shell metacharacters reached the system service'

# ── No daemon, and a daemon with nothing to offer, are both states ───────────
out="$(PANAMA_POWER_FAKE=down run list)"
jq -e '.profiles == [] and .error != ""' >/dev/null <<<"$out" \
    || fail "a missing power daemon must be reported with a reason: $out"

out="$(PANAMA_POWER_FAKE=empty run list)"
jq -e '.profiles == [] and .error != ""' >/dev/null <<<"$out" \
    || fail "a daemon offering no profiles must be reported, not shown as an empty card: $out"

printf 'power profile contract: PASS\n'
