#!/usr/bin/env bash
# ollie:parallel read
# ollie:tier cold
# description: Search memories by keyword, tag, or title
# Args: <query>

[ -z "$*" ] && echo "usage: memory_recall <query>" && exit 1

mount="${OLLIE:-$HOME/mnt/ollie}"
mem_dir="$mount/m"

if [ ! -d "$mem_dir" ]; then
    echo "error: memory directory does not exist: $mem_dir"
    exit 1
fi

query="$*"

# Search filenames (title/tag match) and file bodies
matches=$(grep -ril "$query" "$mem_dir" 2>&1)
grep_exit=$?
if [ $grep_exit -gt 1 ]; then
    echo "error: $matches"
    exit 1
fi

if [ -z "$matches" ]; then
    echo "no matches for: $query"
    exit 0
fi

max_files=10
max_lines_per_file=50
count=0

while IFS= read -r file; do
    count=$((count + 1))
    if [ $count -gt $max_files ]; then
        echo "(showing $max_files of $(echo "$matches" | wc -l) matched files)"
        break
    fi
    echo "=== $(basename "$file") ==="
    head -n $max_lines_per_file "$file" || echo "error: could not read $file"
    lines=$(wc -l < "$file" 2>/dev/null)
    if [ "$lines" -gt $max_lines_per_file ] 2>/dev/null; then
        echo "... ($lines lines total, showing first $max_lines_per_file)"
    fi
    echo
done <<< "$matches"
