#!/bin/sh
#
# spam-ascii — cat a file from ~/ascii given a partial/fuzzy name.
#
# Resolution order:
#   0. pattern `*` → cat every file in ~/ascii (sorted)
#   1. exact filename match: ~/ascii/<pattern>
#   2. exact name + common extension: <pattern>.txt, .ans, .asc
#   3. first case-insensitive *substring* match (sorted alphabetically)
#
# If nothing matches, prints a friendly error to stdout and exits non-zero.
# Used by the irssi /spam alias, which pipes our stdout as channel messages.

set -eu

pattern=${1:-}
if [ -z "$pattern" ]; then
    echo "usage: spam-ascii <pattern>   (pattern `*` dumps everything)"
    exit 1
fi

dir="$HOME/ascii"

# 0. `*` → dump the whole collection.
if [ "$pattern" = "*" ]; then
    find -L "$dir" -maxdepth 1 -type f -print0 2>/dev/null \
        | sort -z \
        | xargs -0 cat
    exit 0
fi

# 1 + 2. Try exact name, then exact + common ASCII-art extensions.
for candidate in \
        "$dir/$pattern" \
        "$dir/$pattern.txt" \
        "$dir/$pattern.ans" \
        "$dir/$pattern.asc"; do
    if [ -f "$candidate" ]; then
        cat "$candidate"
        exit 0
    fi
done

# 3. First case-insensitive substring match. -L so find follows a possible
# symlink starting point (e.g. ~/ascii -> ~/.yadr/ascii); without it, find
# treats the symlink itself as the "starting point" and ignores -type f.
match=$(find -L "$dir" -maxdepth 1 -type f -iname "*$pattern*" 2>/dev/null \
        | sort \
        | head -n1)

if [ -n "$match" ]; then
    cat "$match"
    exit 0
fi

echo "no match in ~/ascii for: $pattern"
exit 1
