#!/bin/bash

set -euo pipefail

repo_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." && pwd)"
qs_dir="$repo_dir/config/dot/quickshell"
osd="$qs_dir/modules/osd/Osd.qml"
state="$qs_dir/services/OsdState.qml"
shell_file="$qs_dir/shell.qml"
keybinds="$repo_dir/config/dot/hypr/keybinds.lua"

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

[[ -f "$osd" ]] || fail 'Prism OSD surface is missing'
[[ -f "$state" ]] || fail 'OSD presentation state is missing'
[[ -f "$qs_dir/modules/osd/qmldir" ]] || fail 'OSD module manifest is missing'
rg -q '^import Quickshell$' "$state" \
    || fail 'OSD singleton does not import the Quickshell Singleton type'

rg -Fq 'import qs.modules.osd' "$shell_file" || fail 'shell does not import the OSD module'
[[ "$(rg -c '^[[:space:]]*Osd \{\}' "$shell_file")" -eq 1 ]] \
    || fail 'shell does not create exactly one OSD per screen'
rg -Fq 'target: "osd"' "$shell_file" || fail 'OSD IPC target is missing'
rg -Fq 'OsdState.progress(kind, value, maximum, label)' "$shell_file" \
    || fail 'progress IPC is not wired to OSD state'
rg -Fq 'OsdState.message(kind, label)' "$shell_file" \
    || fail 'message IPC is not wired to OSD state'

rg -Fq 'WlrLayershell.namespace: "qs-popover-osd"' "$osd" \
    || fail 'OSD does not use the existing Prism blur namespace'
rg -Fq 'WlrLayershell.keyboardFocus: WlrKeyboardFocus.None' "$osd" \
    || fail 'OSD may steal keyboard focus'
rg -Fq 'mask: Region {}' "$osd" || fail 'OSD may intercept pointer input'
rg -Fq 'PrismEdge {' "$osd" || fail 'OSD is missing the Prism signature edge'
rg -Fq 'font.features: Theme.tabularFigures' "$osd" \
    || fail 'changing percentages do not use tabular figures'

rg -Fq '$HOME/.config/quickshell/scripts/panama-osd' "$keybinds" \
    || fail 'keybinds do not use the deployed Panama OSD helper'
for action in \
    'volume up 6' \
    'volume down 6' \
    'volume toggle' \
    'microphone toggle' \
    'volume up 1' \
    'volume down 1' \
    'media play-pause' \
    'media next' \
    'media previous' \
    'media stop' \
    'brightness up 5' \
    'brightness down 5'; do
    rg -Fq "osd(\"$action\")" "$keybinds" \
        || fail "keybind is not routed through panama-osd $action"
done

printf 'osd ui contract: PASS\n'
