#!/bin/bash
# Open file with mailcap viewer selected via fzf

export PATH="/etc/profiles/per-user/$USER/bin:/run/current-system/sw/bin:$PATH"

# Handle piped input or file argument
if [[ -n $1 ]]; then
    file="$1"
else
    # Read from stdin to temp file
    tmpfile=$(mktemp)
    cat >"$tmpfile"
    mime=$(file --mime-type -b "$tmpfile")

    # Add extension based on mime type
    case "$mime" in
    application/pdf) ext=".pdf" ;;
    image/png) ext=".png" ;;
    image/jpeg) ext=".jpg" ;;
    image/gif) ext=".gif" ;;
    text/html) ext=".html" ;;
    text/plain) ext=".txt" ;;
    *) ext="" ;;
    esac

    if [[ -n $ext ]]; then
        mv "$tmpfile" "${tmpfile}${ext}"
        file="${tmpfile}${ext}"
    else
        file="$tmpfile"
    fi
fi

mime=$(file --mime-type -b "$file")

# Get matching viewers based on mime type
viewers=()
viewers+=("open (default app)")

case "$mime" in
application/pdf)
    viewers+=("zathura")
    ;;
image/*)
    viewers+=("chafa (terminal)")
    ;;
text/html)
    viewers+=("w3m (browser)")
    viewers+=("less (text)")
    ;;
text/*)
    viewers+=("bat")
    viewers+=("nvim (readonly)")
    ;;
esac

# Select with fzf
selected=$(printf '%s\n' "${viewers[@]}" | fzf --prompt="Open with: " --height=10)

case "$selected" in
"open (default app)") open "$file" ;;
"chafa (terminal)")
    chafa "$file"
    read -n 1 -s -r -p "Press any key..."
    ;;
"zathura") zathura "$file" ;;
"w3m (browser)") w3m -T text/html "$file" ;;
"less"*) less "$file" ;;
"bat") bat --paging=always --style=plain "$file" ;;
"nvim (readonly)") nvim -R "$file" ;;
esac
