#!/usr/bin/env bash

set -euo pipefail

fail() {
    printf 'focus-session restart: %s\n' "$1" >&2
    exit 1
}

cleanup() {
    qs ipc call focus end >/dev/null 2>&1 || true
}
trap cleanup EXIT

qs ipc call focus end >/dev/null 2>&1 || true
qs ipc call focus start >/dev/null
qs ipc call focus pause >/dev/null
before=$(qs ipc call focus status)

qs kill >/dev/null
for _ in $(seq 1 50); do
    qs list 2>&1 | rg -q '^Instance ' || break
    sleep 0.1
done
if qs list 2>&1 | rg -q '^Instance '; then
    fail 'shell did not stop before restart'
fi
quickshell --daemonize >/dev/null

status=""
for _ in $(seq 1 60); do
    status=$(qs ipc call focus status 2>/dev/null || true)
    if jq -e '.active == true and .paused == true' <<<"$status" >/dev/null 2>&1; then
        break
    fi
    sleep 0.2
done

jq -e '.active == true' <<<"$status" >/dev/null || fail 'active session was not restored'
jq -e '.paused == true' <<<"$status" >/dev/null || fail 'paused state was not restored'
[[ "$(jq -r .remaining <<<"$status")" == "$(jq -r .remaining <<<"$before")" ]] || fail 'paused remainder changed across restart'
jq -e '.doNotDisturb == true' <<<"$status" >/dev/null || fail 'Do Not Disturb was not reclaimed'
jq -e '.caffeine == true' <<<"$status" >/dev/null || fail 'Caffeine was not reclaimed'

cleanup
trap - EXIT
printf 'focus-session restart: PASS\n'
