#!/usr/bin/env bash
set -euo pipefail

BUMP="${1:-}"

if [[ ! "$BUMP" =~ ^(patch|minor|major)$ ]]; then
  echo "Usage: ./release <patch|minor|major>"
  exit 1
fi

if [[ -n "$(git status --porcelain)" ]]; then
  echo "Error: working tree is not clean"
  exit 1
fi

trap 'git checkout main 2>/dev/null' EXIT

# Parse current version
CURRENT=$(grep -m1 '^version' pyproject.toml | sed 's/version = "\(.*\)"/\1/')
IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT"

case "$BUMP" in
  major) MAJOR=$((MAJOR + 1)); MINOR=0; PATCH=0 ;;
  minor) MINOR=$((MINOR + 1)); PATCH=0 ;;
  patch) PATCH=$((PATCH + 1)) ;;
esac

NEXT="${MAJOR}.${MINOR}.${PATCH}"
TAG="v${NEXT}"
BRANCH="release/${TAG}"

echo "Releasing ${CURRENT} → ${NEXT}"

# Fresh main
git checkout main
git pull origin main

# Branch, bump, commit, push
git checkout -b "$BRANCH"
sed -i '' "s/version = \"${CURRENT}\"/version = \"${NEXT}\"/" pyproject.toml
sed -i '' "s/\"version\": \"${CURRENT}\"/\"version\": \"${NEXT}\"/" ntrp-ui/package.json
uv lock
git add pyproject.toml ntrp-ui/package.json uv.lock
git commit -m "bump to ${NEXT}"
git push -u origin "$BRANCH"

# PR, merge
PR_URL=$(gh pr create --title "release ${TAG}" --body "Bump to ${NEXT}")
gh pr merge "$PR_URL" --squash --delete-branch

# Tag + release
git checkout main
git pull origin main
git tag "$TAG"
git push origin "$TAG"
RELEASE_URL=$(gh release create "$TAG" --generate-notes)

echo ""
echo "Done: ${TAG}"
echo "Release: ${RELEASE_URL}"
