#!/bin/sh

DB="${BUKU_DB:-$HOME/.local/share/buku/bookmarks.db}"
DMENU_CMD="${DMENU_CMD:-dmenu -i -l 20 -p Bookmarks: -nb #737573 -nf #000000 -sb #005dbb -sf #ffffea}"

die() {
	if command -v notify-send >/dev/null 2>&1; then
		notify-send "links" "$1"
	else
		printf '%s\n' "$1" >&2
	fi
	exit 1
}

entries() {
	[ -f "$DB" ] || die "No buku database found"

	sqlite3 -separator '	' "$DB" "
		SELECT
			id,
			COALESCE(NULLIF(metadata, ''), URL),
			trim(tags, ','),
			URL,
			replace(replace(desc, char(10), ' '), char(13), ' ')
		FROM bookmarks
		ORDER BY id;
	" | awk -F '	' '
		{
			line = "[" $1 "] " $2
			if ($3 != "") {
				line = line " #" $3
			}
			line = line " <" $4 ">"
			if ($5 != "") {
				line = line " " $5
			}
			print line
		}
	'
}

url_for_id() {
	sqlite3 "$DB" "SELECT URL FROM bookmarks WHERE id = $1 LIMIT 1;"
}

case "${1:-open}" in
	print|list)
		entries
		;;
	open|"")
		choice=$(entries | sh -c "$DMENU_CMD") || exit 0
		[ -n "$choice" ] || exit 0
		id=$(printf '%s\n' "$choice" | sed -n 's/^\[\([0-9][0-9]*\)\].*/\1/p')
		[ -n "$id" ] || exit 0
		url=$(url_for_id "$id")
		[ -n "$url" ] || die "Bookmark not found"
		linkhandler "$url"
		;;
	copy)
		choice=$(entries | sh -c "$DMENU_CMD") || exit 0
		[ -n "$choice" ] || exit 0
		id=$(printf '%s\n' "$choice" | sed -n 's/^\[\([0-9][0-9]*\)\].*/\1/p')
		[ -n "$id" ] || exit 0
		url=$(url_for_id "$id")
		[ -n "$url" ] || die "Bookmark not found"
		printf '%s' "$url" | xclip -selection clipboard
		notify-send "links" "Copied URL"
		;;
	*)
		printf 'Usage: links [open|copy|print]\n' >&2
		exit 1
		;;
esac
