#!/usr/bin/env bash

set -euo pipefail

repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
commands_dir="$repo_dir/config/local/share/vicinae/scripts"
work="$(mktemp -d /tmp/panama-commands.XXXXXX)"
dispatch_log="$work/dispatch.log"

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

cleanup() {
    rm -rf "$work"
}
trap cleanup EXIT

declare -A expected=(
    [open-control-center.sh]=control-center
    [open-notifications.sh]=notifications
    [open-calendar.sh]=calendar
    [open-clipboard.sh]=clipboard
    [open-mission-control.sh]=overview
    [open-settings.sh]=settings
    [check-system-health.sh]=health
    [toggle-dnd.sh]=dnd
    [toggle-caffeine.sh]=caffeine
    [toggle-night-light.sh]=night-light
    [start-focus.sh]=focus-start
    [end-focus.sh]=focus-end
    [capture.sh]=capture
    [screen-intelligence.sh]=intelligence
    [quick-screenshot.sh]=screenshot
    [toggle-microphone.sh]=microphone
    [open-prism-gallery.sh]=gallery
    [restart-shell.sh]=restart-shell
)

mkdir -p "$work/home/.config/quickshell/scripts"
cat >"$work/home/.config/quickshell/scripts/panama-action" <<'EOF'
#!/usr/bin/env bash
printf '%s\n' "$*" >>"$PANAMA_COMMAND_TEST_LOG"
EOF
chmod +x "$work/home/.config/quickshell/scripts/panama-action"

[[ -d "$commands_dir" ]] || fail 'Vicinae command directory is missing'

mapfile -t actual_files < <(find "$commands_dir" -maxdepth 1 -type f -name '*.sh' -printf '%f\n' | sort)
[[ ${#actual_files[@]} -eq ${#expected[@]} ]] \
    || fail "expected ${#expected[@]} commands, found ${#actual_files[@]}"

declare -A seen_titles=()
for script_name in "${!expected[@]}"; do
    script="$commands_dir/$script_name"
    [[ -x "$script" ]] || fail "$script_name is missing or not executable"

    vicinae script check "$script" >/dev/null \
        || fail "$script_name is rejected by Vicinae"

    title="$(sed -n 's/^# @vicinae.title //p' "$script")"
    [[ $title == 'Panama: '* ]] || fail "$script_name has an ungrouped title: $title"
    [[ -z ${seen_titles[$title]+x} ]] || fail "duplicate launcher title: $title"
    seen_titles[$title]=1

    grep -Fxq '# @vicinae.mode silent' "$script" \
        || fail "$script_name does not close quietly after success"
    grep -Fq '# @vicinae.description ' "$script" \
        || fail "$script_name has no searchable description"
    grep -Fq '# @vicinae.keywords ' "$script" \
        || fail "$script_name has no search vocabulary"
    grep -Fxq '# @vicinae.icon ../../icons/hicolor/scalable/apps/panama-settings.svg' "$script" \
        || fail "$script_name does not use the Panama application identity"

    if [[ $script_name == check-system-health.sh ]]; then
        [[ $title == 'Panama: Check System Health' ]] \
            || fail "health command has the wrong title: $title"
        grep -Fxq '# @vicinae.schemaVersion 1' "$script" \
            || fail 'health command does not use schema version 1'
        grep -Fxq '# @vicinae.keywords ["health", "doctor", "repair", "services"]' "$script" \
            || fail 'health command has the wrong search vocabulary'
        grep -Fxq 'exec "$HOME/.config/quickshell/scripts/panama-action" health' "$script" \
            || fail 'health command bypasses the stable dispatcher path'
    fi

    : >"$dispatch_log"
    HOME="$work/home" PANAMA_COMMAND_TEST_LOG="$dispatch_log" "$script"
    dispatched="$(cat "$dispatch_log")"
    [[ $dispatched == "${expected[$script_name]}" ]] \
        || fail "$script_name dispatched [$dispatched], expected [${expected[$script_name]}]"
done

printf 'Panama commands contract: PASS (%d commands)\n' "${#expected[@]}"
