#!/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 for tmux session (set before creating session)
LLAMA_BASE_URL="$LLAMA_SWAP_API"
LLAMA_AUTH_TOKEN="dummy"
LLAMA_MODEL_ID="$MODEL_ID"
LLAMA_CTX="$CTX"

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

# Create environment setup file for the session
ENV_SETUP="/tmp/businessman-env-$$-$SESSION_NAME"
cat > "$ENV_SETUP" << EOF
export ANTHROPIC_BASE_URL="$LLAMA_BASE_URL"
export ANTHROPIC_AUTH_TOKEN="$LLAMA_AUTH_TOKEN"
export ANTHROPIC_DEFAULT_SONNET_MODEL="$LLAMA_MODEL_ID"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="$LLAMA_MODEL_ID"
export ANTHROPIC_DEFAULT_OPUS_MODEL="$LLAMA_MODEL_ID"
export CLAUDE_CODE_DISABLE_1M_CONTEXT="$CLAUDE_DISABLE_1M_CONTEXT"
export CLAUDE_CODE_AUTO_COMPACT_WINDOW="$CLAUDE_AUTO_COMPACT_WINDOW"
export CLAUDE_AUTOCOMPACT_PCT_OVERRIDE="$CLAUDE_AUTOCOMPACT_PCT_OVERRIDE"
EOF

# Start tmux session with bash in pane 0 (keeps shell alive after claude exits)
tmux new-session -d -s "$SESSION_NAME" "bash"

# Send commands to pane 0 that source the env file and then run claude
tmux send-keys -t "$SESSION_NAME:0.0" "source \"$ENV_SETUP\"" Enter
sleep 0.2
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"

# Set pane 1 to also source the env file
tmux send-keys -t "$SESSION_NAME:0.1" "source \"$ENV_SETUP\"" Enter

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"

# Clean up temp file after session ends
rm -f "$ENV_SETUP"