#!/usr/bin/env bash
#
# businessman — spawns tmux session with claude + Ralph, model selected interactively
#

set -e

LLAMA_SWAP_API="${LLAMA_SWAP_API:-http://192.168.50.21:6901}"

echo "Fetching models from llama-swap..."
MODELS_JSON=$(curl -s "$LLAMA_SWAP_API/v1/models")

if [ $? -ne 0 ]; then
    echo "Failed to reach llama-swap at $LLAMA_SWAP_API"
    echo "   Set LLAMA_SWAP_API to override."
    exit 1
fi

# Extract model IDs
mapfile -t MODEL_IDS < <(echo "$MODELS_JSON" | jq -r '.data[].id')
mapfile -t MODEL_CTXS < <(echo "$MODELS_JSON" | jq -r '.data[].meta.llamaswap.context_length // "unknown"')

if [ ${#MODEL_IDS[@]} -eq 0 ]; then
    echo "No models returned from llama-swap."
    exit 1
fi

echo ""
echo "Available models:"
for i in "${!MODEL_IDS[@]}"; do
    printf "%2d) %s" "$((i+1))" "${MODEL_IDS[$i]}"
    if [ "${MODEL_CTXS[$i]}" != "unknown" ] && [ -n "${MODEL_CTXS[$i]}" ]; then
        printf " (ctx: %s)" "${MODEL_CTXS[$i]}"
    fi
    printf "\n"
done

echo ""
read -p "Select model number: " SELECTION

if ! [[ "$SELECTION" =~ ^[0-9]+$ ]] || [ "$SELECTION" -lt 1 ] || [ "$SELECTION" -gt ${#MODEL_IDS[@]} ]; then
    echo "Invalid selection. Must be between 1 and ${#MODEL_IDS[@]}."
    exit 1
fi

# Get selected model
idx=$((SELECTION - 1))
MODEL_ID="${MODEL_IDS[$idx]}"
CTX="${MODEL_CTXS[$idx]}"

echo "Selected: $MODEL_ID"
[ -n "$CTX" ] && [ "$CTX" != "unknown" ] && echo "   Context length: $CTX"

# Project directory
PROJECT_DIR="${1:-.}"
cd "$PROJECT_DIR" || { echo "Directory not found: $PROJECT_DIR"; exit 1; }

SESSION_NAME="businessman-$(date +%Y%m%d-%H%M%S)"

# Set env vars (inheritable by tmux panes)
export ANTHROPIC_BASE_URL="$LLAMA_SWAP_API"
export ANTHROPIC_AUTH_TOKEN="dummy"
export ANTHROPIC_DEFAULT_SONNET_MODEL="$MODEL_ID"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="$MODEL_ID"
export ANTHROPIC_DEFAULT_OPUS_MODEL="$MODEL_ID"

# Context-aware settings
if [ -n "$CTX" ] && [ "$CTX" != "unknown" ] && [ "$CTX" -gt 0 ]; then
    if [ "$CTX" -gt 200000 ]; then
        export CLAUDE_CODE_DISABLE_1M_CONTEXT="0"
        export CLAUDE_CODE_AUTO_COMPACT_WINDOW="200000"
    else
        export CLAUDE_CODE_DISABLE_1M_CONTEXT="1"
        export CLAUDE_CODE_AUTO_COMPACT_WINDOW="$CTX"
    fi
    export CLAUDE_AUTOCOMPACT_PCT_OVERRIDE="80"
else
    export CLAUDE_CODE_DISABLE_1M_CONTEXT="1"
fi

# Start tmux session with bash in pane 0 (keeps shell alive after claude exits)
tmux new-session -d -s "$SESSION_NAME" "bash"
# Send 'claude' command to pane 0 and hit Enter
tmux send-keys -t "$SESSION_NAME:0.0" "claude \"Use the businessman skill to initialize our session\"" Enter

# Pane 1 is still a plain bash
tmux split-window -t "$SESSION_NAME:0.0" -h "bash"
tmux resize-pane -t "$SESSION_NAME:0.0" -x 50

# Focus pane 0 (Claude)
tmux select-pane -t "$SESSION_NAME:0.0"

# Summary
echo ""
echo "Session '$SESSION_NAME' created"
echo "Pane 0: claude (model=$MODEL_ID) — 'claude' already running"
echo "Pane 1: bash (Ralph-ready)"
[ -n "$CTX" ] && [ "$CTX" != "unknown" ] && echo "Context: $CTX tokens"
echo ""
echo "When done with claude, type 'exit' in pane 0 to get your bash shell back"
echo "To reattach: tmux attach -t $SESSION_NAME"

# Auto-attach
tmux attach -t "$SESSION_NAME"