#!/bin/sh

# This is a simple script that allows you to have image preview
# in fzf, using ueberzugpp with fifo. For this script to work
# you must add it to path, because it requires to call itself
# during the preview process in fzf (line 42 -> $0).
# Example usage:
# ls | fzf-fifo
# find $HOME/pix/ -type f -iname "*.jpg" | fzf-fifo

FIFO="/tmp/fzf_preview_fifo"
[ -p "$FIFO" ] || mkfifo "$FIFO"

start_ueberzugpp() {
    ueberzugpp layer --silent <"$FIFO" &
    exec 3>"${FIFO}"
}

cleanup() {
    exec 3>&-
}
trap cleanup HUP INT QUIT TERM EXIT

preview_image() {
    echo '{"path": "'"$1"'", "action": "add", ''"identifier": "fzfpreview", '\
        '"x": "'"$FZF_PREVIEW_LEFT"'", "y": "'"$FZF_PREVIEW_TOP"'", '\
        '"width": "'"$FZF_PREVIEW_COLUMNS"'", "height": "'"$FZF_PREVIEW_LINES"'"}' \
        >"$FIFO"
}

case "$1" in
    -W)
        shift
        preview_image "$@"
        exit
        ;;
esac

main() {
    start_ueberzugpp
    selected_image=$(fzf --preview "$0 -W {}" --preview-window=up:60%:wrap)
    [ -n "$selected_image" ] && echo "Selected image: $selected_image"
    rm "$FIFO"
}
main
