#!/bin/bash

# omarchy:summary=Decode a QR code from a screenshot region
# omarchy:group=capture
# omarchy:examples=omarchy capture qr

# Keep hyprpicker alive until after grim captures so the screenshot sees the
# frozen overlay rather than live content shifting during teardown.
cleanup_freeze() {
  [[ -n $PID ]] && kill $PID 2>/dev/null
}
trap cleanup_freeze EXIT

hyprpicker -r -z >/dev/null 2>&1 &
PID=$!
sleep .1
SELECTION=$(slurp 2>/dev/null)

[[ -z $SELECTION ]] && exit 0

# Decode QR codes only. Leaving the other symbologies enabled lets dense screen
# content false-positive as an EAN or Code 39 barcode and take over the clipboard.
RESULT=$(grim -g "$SELECTION" - | zbarimg -q --raw -Sdisable -Sqrcode.enable - 2>/dev/null)

if [[ -z $RESULT ]]; then
  omarchy-notification-send -g 󰐲 -u critical "No QR code found" "Select a region containing a QR code"
  exit 1
fi

# QR codes routinely carry secrets, like the otpauth:// URIs behind 2FA setup
# codes, so the decoded value goes to the clipboard and nowhere else. Printing it
# or putting it in the notification would leak it to the session journal and to
# the notification history, and an unmarked copy would be retained by clipboard
# history. Pasting still works; only the recorded copy is given up.
printf '%s' "$RESULT" | wl-copy --sensitive
omarchy-notification-send -g 󰐲 "QR code copied to clipboard"
