#!/usr/bin/env bash
# ollie:parallel read
# description: Read/write KDE clipboard via Klipper D-Bus. Args: [get|set|history] [text|index]
set -euo pipefail

SERVICE="org.kde.klipper"
PATH_OBJ="/klipper"
IFACE="org.kde.klipper.klipper"

cmd="${1:-get}"

case "$cmd" in
    get)
        gdbus call --session --dest "$SERVICE" \
            --object-path "$PATH_OBJ" \
            --method "$IFACE.getClipboardContents" | \
            sed "s/^('//;s/')$//;s/\\\\n/\n/g"
        ;;
    set)
        text="${2:?usage: gui_clipboard set <text>}"
        gdbus call --session --dest "$SERVICE" \
            --object-path "$PATH_OBJ" \
            --method "$IFACE.setClipboardContents" "$text" >/dev/null
        echo "OK: clipboard set"
        ;;
    history)
        index="${2:-0}"
        gdbus call --session --dest "$SERVICE" \
            --object-path "$PATH_OBJ" \
            --method "$IFACE.getClipboardHistoryItem" "$index" | \
            sed "s/^('//;s/')$//;s/\\\\n/\n/g"
        ;;
    clear)
        gdbus call --session --dest "$SERVICE" \
            --object-path "$PATH_OBJ" \
            --method "$IFACE.clearClipboardHistory" >/dev/null
        echo "OK: clipboard history cleared"
        ;;
    *)
        echo "usage: gui_clipboard [get|set|history|clear] [text|index]" >&2
        exit 1
        ;;
esac
