#!/usr/bin/env sh

set -e

LINK=https://hashru.link/
DELFILE="${XDG_DATA_HOME:-$HOME/.local/share}/rushlink/delete"

link() {
    case "$1" in
        https://*|http://*)
            printf '%s' "$1" | curl -sS -F'shorten=<-' "$LINK"
            ;;
        *)
            curl -sS -Ffile=@- "$LINK" < "$1"
            ;;
    esac | awk 'NR == 1 { print } $NF ~ /deleteToken=/ { print $NF; exit }' | (
        IFS= read -r link
        IFS= read -r deletelink
        echo "$link"
        mkdir -p "$(dirname "$DELFILE")"
        echo "$deletelink" >> "$DELFILE"
    )
}

del() {
    case "$1" in
        https://*|http://*)
            URL="$1"
            ;;
        *)
            URL="$LINK$1"
            ;;
    esac
    # Remove file extension, if any.
    NAME="${URL##*/}"
    URL="${URL%/*}/${NAME%%.*}"
    if DELURL=$(grep -s -m1 "$URL?deleteToken=" "$DELFILE"); then
        echo "Deleting $URL..." >&2
        curl -sS -X DELETE "$DELURL" | grep deleted
    else
        echo "Delete token for $URL is not known." >&2
        exit 1
    fi
}

screenshot() {
    if command -v import >/dev/null 2>&1; then
        CMD="import png:-"
    elif command -v maim >/dev/null 2>&1; then
        CMD="maim -uks"
    else
        echo "Neither import (imagemagick) nor maim were found. One of these is needed to make screenshots." >&2
        exit 1
    fi
    FILE=$(mktemp)
    if $CMD > "$FILE"; then
        LINK=$(link "$FILE")
        rm -f "$FILE"
        echo "$LINK.png"
        if command -v xdg-open >/dev/null 2>&1; then
            xdg-open "$LINK.png"
        fi
    else
        rm -f "$FILE"
        exit $?
    fi
}

if [ $# -gt 0 ]; then
    case "$1" in
        --help|-h)
            CMD=$(basename "$0")
            echo "$CMD - Command line tool for $LINK"
            echo
            echo "Usage:"
            echo "    $CMD https://example.com/"
            echo "        Shorten link."
            echo "    $CMD file.txt"
            echo "    $CMD < file.txt"
            echo "        Upload file."
            echo "    $CMD"
            echo "    echo hi | $CMD"
            echo "        Upload file from standard input."
            echo "    $CMD (--screenshot|-s)"
            echo "        Select a window or an area of your screen, and upload it as png."
            echo "    $CMD (--delete|-d) ${LINK}xd42"
            echo "    $CMD (--delete|-d) xd42"
            echo "        Delete file or shortened link."
            echo
            echo "Delete tokens are stored in $DELFILE"
            exit 0
            ;;
        --delete|-d)
            shift
            for url in "$@"; do
                del "$url"
            done
            exit 0
            ;;
        --screenshot|-s)
            shift
            if [ $# -gt 0 ]; then
                echo "No arguments expected to --screenshot" >&2
                exit 1
            fi
            screenshot
            exit 0
            ;;
        *)
            for url in "$@"; do
                link "$url"
            done
            exit 0
    esac
fi

if [ -t 0 ]; then
    echo "Sending standard input to $LINK" >&2
    echo "^C to cancel, ^D to send." >&2
fi

link /dev/stdin
