#!/bin/bash
set -e

# Restart an application by killing it and relaunching via uwsm.
# Usage: nomarchy-restart-app <application-name> [application-args...]
#
# We wait for the old process to actually exit before launching the
# new one. Without the wait, the new instance starts while the old
# one's wayland surface is still mapped — visible as ghosting on
# layer-shell apps and double-instance briefly for everything else.
# Same race that produced the waybar theme-switch artifacts before
# 386da51 moved waybar to a SIGUSR2-reload path.

app="$1"
shift || true

if pgrep -x "$app" >/dev/null 2>&1; then
    pkill -x "$app" 2>/dev/null || true
    # Poll for graceful exit, up to ~1.5s.
    for _ in $(seq 1 15); do
        pgrep -x "$app" >/dev/null 2>&1 || break
        sleep 0.1
    done
    # Anything still running: SIGKILL it. Without this, a misbehaving
    # process can hold the surface indefinitely and the new instance
    # races on top.
    pkill -KILL -x "$app" 2>/dev/null || true
fi

setsid uwsm-app -- "$app" "$@" >/dev/null 2>&1 &
