#!/bin/bash

# omarchy:summary=Focus a Hyprland window by application identity
# omarchy:args=<app-name>
# omarchy:examples=omarchy hyprland focus app Slack

usage() {
  echo "Usage: omarchy-hyprland-focus-app <app-name>" >&2
  exit 1
}

app=${1:-}
[[ -n $app ]] || usage

# Agent terminals notify as kitty/foot/etc. while their shared window class is
# org.omarchy.agent, leaving the terminal name only in initialTitle. So match
# by class first, then fall back to the launch-time title of agent windows.
address=$(
  hyprctl clients -j 2>/dev/null |
    jq -r --arg pattern "$app" \
      'def matches($value): ($value // "") | test($pattern; "i");
       first(
         (.[] | select(matches(.class))),
         (.[] | select(.initialClass == "org.omarchy.agent" and matches(.initialTitle)))
       ).address // empty'
)

[[ -n $address ]] || exit 1

hyprctl dispatch "hl.dsp.focus({ window = \"address:$address\" })" >/dev/null 2>&1 || \
  hyprctl dispatch focuswindow "address:$address" >/dev/null
