#!/bin/bash
# Refactor - Ask ollie to refactor the selected code
#
# Usage: Select code, then middle-click Refactor in the tag

set -euo pipefail

if [[ -z "${winid:-}" ]]; then
    echo "Refactor must be run from within acme" >&2
    exit 1
fi

# Get the window name (filename) from the tag
filename=$(9p read acme/$winid/tag | awk '{print $1}')

# Read the current selection
echo 'addr=dot' | 9p write acme/$winid/ctl
selection=$(9p read acme/$winid/xdata 2>/dev/null || true)

if [[ -z "$selection" ]]; then
    echo "No selection. Select some code first." >&2
    exit 1
fi

# Ensure acme session/agent exists
eval $(acme-ollie-ensure)

# Build location string
location=""
if [[ -n "$filename" && "$filename" != *"+Errors" && "$filename" != "+*" ]]; then
    location=" in \`$filename\`"
fi

# Build and send the prompt
prompt="Edit the source file $filename.

The selected code below is the target. It may be incomplete context:

$selection

Instructions:
- Read the actual file and relevant surrounding code before editing.
- Refactor the selected code without changing its external behavior.
- Make one focused improvement. Do not rewrite unrelated code.
- Follow the existing project style. Do not add unnecessary abstractions.
- Apply the refactor directly to the file. Do not only describe a patch.
- Run formatting and the most relevant tests or diagnostics if available.

After editing, report the file changed, the refactor made, and verification performed."

echo "$prompt" | o "$OLLIE_SESSION/$OLLIE_AGENT" prompt
