#!/usr/bin/env bash
# Interactive git patch applier - finds git repos and applies patch from stdin

# Save stdin (the patch) to a temp file
patch_file=$(mktemp /tmp/patch.XXXXXX)
cat >"$patch_file"

# Find git repos and select with fzf
repo=$(find ~/projects ~/code ~/dotfiles ~ -maxdepth 3 -type d -name ".git" 2>/dev/null |
    sed 's/\/.git$//' |
    sort -u |
    fzf --prompt="Select repo to apply patch: " --height=40% --reverse)

if [ -z "$repo" ]; then
    echo "No repo selected, patch saved to: $patch_file"
    exit 1
fi

cd "$repo" || exit 1
echo "Applying patch to: $repo"
git apply "$patch_file"
status=$?

if [ $status -eq 0 ]; then
    echo "Patch applied successfully!"
    rm "$patch_file"
else
    echo "Failed to apply patch. Patch saved to: $patch_file"
fi

exit $status
