#!/bin/bash

countdown() {
  for count in {3..1}; do
    notify "Recording in $count seconds" -t 1000
    sleep 1
  done
}

notify() {
  notify-send \
    "$1" \
    -i "/usr/share/icons/Yaru/scalable/devices/camera-video-symbolic.svg" \
    "${@:2}"
}

kill_waybar() {
  pkill -U $USER -x -RTMIN+8 waybar
}

kill_recursive() {
  ps -o sid= -p "$1" | xargs pkill -U $USER --signal SIGINT -g
}

cleanup() {
  pid=$(cat "$1")
  rm "$1"
  kill_waybar
  kill_recursive "$pid"
  exit
}

main() {
  pid_file="/tmp/screenrecorder-$UID.pid"

  test -e "$pid_file" && cleanup "$pid_file"
  echo "$$" > "$pid_file"

  target_path=$(xdg-user-dir VIDEOS)
  timestamp=$(date +'recording_%Y%m%d-%H%M%S')

  notify "Select a region to record" -t 1000
  area=$(swaymsg -t get_tree | \
    jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | \
    slurp)

  countdown
  (sleep 0.5 && kill_waybar) &

  if [[ "$1" == "-a" ]]; then
    file="$target_path/$timestamp.mp4"
    wf-recorder --audio -g "$area" --file="$file"
  else
    file="$target_path/$timestamp.webm"
    output="$(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .name')"
    wf-recorder \
      -g "$area" -c libvpx \
      --codec-param="qmin=0" \
      --codec-param="qmax=25" \
      --codec-param="crf=4" \
      --codec-param="b:v=1M" \
      -o "$output" \
      --file="$file"
  fi

  kill_waybar && notify "Finished recording ${file}"
  rm $pid_file
}
main "$@"
