#!/usr/bin/env bash set -euo pipefail fail() { printf 'Panama action IPC contract: %s\n' "$1" >&2 exit 1 } active_target="" original_state="" night_light_snapshot="" restore_target() { local target="$1" expected="$2" current current="$(qs ipc call "$target" status 2>/dev/null || true)" if [[ $current != "$expected" && ( $expected == true || $expected == false ) ]]; then qs ipc call "$target" toggle >/dev/null 2>&1 || true fi } cleanup() { if [[ -n $active_target ]]; then restore_target "$active_target" "$original_state" fi if [[ -n $night_light_snapshot ]]; then local enabled automatic enabled="$(jq -r '.enabled' <<<"$night_light_snapshot")" automatic="$(jq -r '.automatic' <<<"$night_light_snapshot")" qs ipc call night-light restore "$enabled" "$automatic" >/dev/null 2>&1 || true fi } trap cleanup EXIT exercise_toggle() { local target="$1" before after restored before="$(qs ipc call "$target" status)" active_target="$target" original_state="$before" [[ $before == true || $before == false ]] \ || fail "$target returned a non-boolean status: $before" after="$(qs ipc call "$target" toggle)" [[ $after != "$before" ]] \ || fail "$target did not change state: before=$before after=$after" restored="$(qs ipc call "$target" toggle)" [[ $restored == "$before" ]] \ || fail "$target did not restore its original state: before=$before restored=$restored" active_target="" original_state="" } ipc="$(qs ipc show)" rg -q '^target caffeine$' <<<"$ipc" || fail 'caffeine IPC target is missing' rg -q '^target night-light$' <<<"$ipc" || fail 'night-light IPC target is missing' exercise_toggle caffeine night_light_snapshot="$(qs ipc call night-light settings)" jq -e '.enabled | type == "boolean"' <<<"$night_light_snapshot" >/dev/null \ || fail 'night-light settings omitted enabled state' jq -e '.automatic | type == "boolean"' <<<"$night_light_snapshot" >/dev/null \ || fail 'night-light settings omitted automatic state' exercise_toggle night-light original_enabled="$(jq -r '.enabled' <<<"$night_light_snapshot")" original_automatic="$(jq -r '.automatic' <<<"$night_light_snapshot")" qs ipc call night-light restore "$original_enabled" "$original_automatic" >/dev/null restored_snapshot="$(qs ipc call night-light settings)" [[ "$(jq -r '.enabled' <<<"$restored_snapshot")" == "$original_enabled" ]] \ || fail 'night-light enabled state was not restored' [[ "$(jq -r '.automatic' <<<"$restored_snapshot")" == "$original_automatic" ]] \ || fail 'night-light automatic schedule was not restored' night_light_snapshot="" printf 'Panama action IPC contract: PASS\n'