#!/bin/bash
#
# Screenshot all layouts. This needs phoc, swaybg and montage (from
# Imagemagick) in $PATH and the osk built in _build/ The used background can be
# given via the BG environment variable.
#
# Screenshots are put into _build/screenshots.

set -e

WORKDIR=_build/screenshots
PHOC_INI=${PHOC_INI:-/usr/share/phosh/phoc.ini}

function cleanup()
{
    kill "$PHOC_PID"
    rm -f "$WORKDIR/wl-info"
}

trap cleanup EXIT

[ -z "$BG" ] || BG_OPTS="-i $BG"

mkdir -p "$WORKDIR"
screen="360x720@1"
WLR_BACKENDS=headless phoc -C "${PHOC_INI}" \
     -E "printenv | grep WAYLAND_DISPLAY= > ${WORKDIR}/wl-info; swaybg ${BG_OPTS}" &
PHOC_PID=$!

echo -n "Waiting for phoc to start..."
WAIT=5
while [ ${WAIT} -gt 0 ]; do
  [ ! -f "${WORKDIR}/wl-info" ] || break
  sleep 1
  ((WAIT-=1))
done

# shellcheck source=/dev/null
. "${WORKDIR}"/wl-info
export WAYLAND_DISPLAY
echo "Using wayland display $WAYLAND_DISPLAY"

mkdir -p "$WORKDIR/$screen"
for json in src/layouts/*.json; do
    layout="$(basename "$json" .json)"
    echo "Screenshotting layout '$layout' at '$screen'"
    POS_TEST_LAYOUT="$layout" POS_DEBUG=force-show _build/run --replace &
    OSK_PID=$!
    sleep 1
    grim "$WORKDIR/$screen/$layout.png"
    kill "$OSK_PID"
done

montage -mode concatenate "$WORKDIR/$screen/*.png" "$WORKDIR/$screen.png"
