#!/usr/bin/env bash
# Version bump script.
#
# Updates version in pyproject.toml and optionally updates CHANGELOG.
#
# Usage:
#   ./scripts/bump-version [major|minor|patch|VERSION]
#
# Examples:
#   ./scripts/bump-version patch     # 0.5.1 -> 0.5.2
#   ./scripts/bump-version minor     # 0.5.1 -> 0.6.0
#   ./scripts/bump-version major     # 0.5.1 -> 1.0.0
#   ./scripts/bump-version 0.7.0     # Explicit version
#
set -euo pipefail

if [[ $# -lt 1 ]]; then
    echo "Usage: $0 [major|minor|patch|VERSION]"
    exit 1
fi

BUMP_TYPE="$1"

# Get project root
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
cd "$PROJECT_ROOT"

# Extract current version
CURRENT=$(grep -E '^version\s*=' pyproject.toml | head -1 | sed 's/.*"\(.*\)".*/\1/')

if [[ -z "$CURRENT" ]]; then
    echo "Error: Could not extract current version from pyproject.toml"
    exit 1
fi

echo "Current version: $CURRENT"

# Parse version components
IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT"

# Handle pre-release suffix (e.g., 0.5.1-dev.1)
PATCH_BASE="${PATCH%%-*}"
SUFFIX="${PATCH#$PATCH_BASE}"

case "$BUMP_TYPE" in
    major)
        NEW_VERSION="$((MAJOR + 1)).0.0"
        ;;
    minor)
        NEW_VERSION="${MAJOR}.$((MINOR + 1)).0"
        ;;
    patch)
        NEW_VERSION="${MAJOR}.${MINOR}.$((PATCH_BASE + 1))"
        ;;
    *)
        # Assume it's an explicit version
        NEW_VERSION="$BUMP_TYPE"
        ;;
esac

echo "New version: $NEW_VERSION"

# Validate version format
if ! [[ "$NEW_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$ ]]; then
    echo "Error: Invalid version format: $NEW_VERSION"
    echo "Expected: MAJOR.MINOR.PATCH or MAJOR.MINOR.PATCH-suffix"
    exit 1
fi

# Update pyproject.toml
echo "Updating pyproject.toml..."
sed -i "s/^version = \"$CURRENT\"/version = \"$NEW_VERSION\"/" pyproject.toml

# Update __init__.py if it has version
INIT_FILE="src/hypergumbo/__init__.py"
if [[ -f "$INIT_FILE" ]] && grep -q "__version__" "$INIT_FILE"; then
    echo "Updating $INIT_FILE..."
    sed -i "s/__version__ = \"$CURRENT\"/__version__ = \"$NEW_VERSION\"/" "$INIT_FILE"
fi

# Prompt to update CHANGELOG
if [[ -f "CHANGELOG.md" ]]; then
    if grep -q "## \[Unreleased\]" CHANGELOG.md; then
        echo ""
        read -p "Update CHANGELOG.md [Unreleased] -> [$NEW_VERSION]? [Y/n] " -n 1 -r
        echo
        if [[ ! $REPLY =~ ^[Nn]$ ]]; then
            TODAY=$(date +%Y-%m-%d)
            sed -i "s/## \[Unreleased\]/## [Unreleased]\n\n## [$NEW_VERSION] - $TODAY/" CHANGELOG.md
            echo "Updated CHANGELOG.md"
        fi
    fi
fi

echo ""
echo "Version bumped: $CURRENT -> $NEW_VERSION"
echo ""
echo "Next steps:"
echo "  1. Review changes: git diff"
echo "  2. Commit: git commit -am 'chore: bump version to $NEW_VERSION'"
echo "  3. (Optional) Tag: git tag v$NEW_VERSION"
