#!/bin/bash

# Toggle to pop-out a tile to stay fixed on a display basis.

# Usage:
# nomarchy-hyprland-window-pop [width height [x y]]
#
# Arguments:
#   width   Optional. Width of the floating window. Default: 1300
#   height  Optional. Height of the floating window. Default: 900
#   x       Optional. X position of the window. Must provide both X and Y to take effect.
#   y       Optional. Y position of the window. Must provide both X and Y to take effect.
#
# Behavior:
#   - If the window is already pinned, it will be unpinned and removed from the pop layer.
#   - If the window is not pinned, it will be floated, resized, moved/centered, pinned, brought to top, and popped.

width=${1:-1300}
height=${2:-900}
x=${3:-}
y=${4:-}

active=$(hyprctl activewindow -j)
pinned=$(echo "$active" | jq ".pinned")
addr=$(echo "$active" | jq -r ".address")

if [[ $pinned == "true" ]]; then
  hyprctl -q --batch \
    "dispatch pin address:$addr;" \
    "dispatch togglefloating address:$addr;" \
    "dispatch tagwindow -pop address:$addr;"
elif [[ -n $addr ]]; then
  hyprctl dispatch togglefloating address:$addr
  hyprctl dispatch resizeactive exact $width $height address:$addr

  if [[ -n $x && -n $y ]]; then
    hyprctl dispatch moveactive $x $y address:$addr
  else
    hyprctl dispatch centerwindow address:$addr
  fi

  hyprctl -q --batch \
    "dispatch pin address:$addr;" \
    "dispatch alterzorder top address:$addr;" \
    "dispatch tagwindow +pop address:$addr;"
fi
