#!/usr/bin/env bash

# initialize a new worktree from a branch name:
#
# - creates a new branch from current HEAD
# - creates a new worktree in a parent folder, suffixed with the branch name
#
# sample usage:
#   ./scripts/wc2wt.sh gg/new-feature-foo-bar
#   ./scripts/wc2wt.sh gg/new-feature-foo-bar opencode
#   ./scripts/wc2wt.sh gg/new-feature-foo-bar "cmake -B build && cmake --build build"
#   ./scripts/wc2wt.sh gg/new-feature-foo-bar "bash -l"

function usage() {
    echo "usage: $0 <branch_name> [cmd]"
    exit 1
}

# check we are in the right directory
if [[ ! -f "scripts/wc2wt.sh" ]]; then
    echo "error: this script must be run from the root of the repository"
    exit 1
fi

if [[ $# -lt 1 || $# -gt 2 ]]; then
    usage
fi

BRANCH=$1

if [[ -z "$BRANCH" ]]; then
    echo "error: branch name must not be empty"
    exit 1
fi

dir=$(basename $(pwd))
# sanitize branch name for directory name (replace / with -)
dir_suffix=$(echo "$BRANCH" | tr '/' '-')

git worktree add "../$dir-$dir_suffix" "$BRANCH" || git worktree add -b "$BRANCH" "../$dir-$dir_suffix" HEAD

og_path=$(pwd)
wt_path=$(cd "../$dir-$dir_suffix" && pwd)

echo "git worktree created in $wt_path"

cd "$wt_path"

# pi agent setup in the worktree
if [[ -f "$og_path/.pi/SYSTEM.md" && ! -f ".pi/SYSTEM.md" ]]; then
    mkdir -p .pi
    ln -sfn "$og_path/.pi/SYSTEM.md" .pi/SYSTEM.md
fi

if [[ $# -eq 2 ]]; then
    echo "executing: $2"
    eval "$2"
fi
