#!/bin/bash
# Version bump script for Rust crates
# Usage: ./scripts/version-bump.sh [patch|minor|major]

set -euo pipefail

BUMP_TYPE="${1:-patch}"

if [[ ! "$BUMP_TYPE" =~ ^(patch|minor|major)$ ]]; then
    echo "❌ Invalid bump type: $BUMP_TYPE"
    echo "Usage: $0 [patch|minor|major]"
    exit 1
fi

# Read current version
CURRENT_VERSION=$(grep '^version = ' Cargo.toml | cut -d'"' -f2)
echo "Current version: $CURRENT_VERSION"

# Extract version parts
BASE_VERSION=$(echo "$CURRENT_VERSION" | cut -d'-' -f1)
IFS='.' read -r major minor patch <<< "$BASE_VERSION"

# Calculate new version
case "$BUMP_TYPE" in
    major)
        major=$((major + 1))
        minor=0
        patch=0
        ;;
    minor)
        minor=$((minor + 1))
        patch=0
        ;;
    patch)
        patch=$((patch + 1))
        ;;
esac

NEW_VERSION="${major}.${minor}.${patch}"
echo "New version: $NEW_VERSION"

# Update Cargo.toml
if [[ "$OSTYPE" == "darwin"* ]]; then
    sed -i '' "s/^version = \".*\"/version = \"$NEW_VERSION\"/" Cargo.toml
else
    sed -i "s/^version = \".*\"/version = \"$NEW_VERSION\"/" Cargo.toml
fi

# Verify update
UPDATED=$(grep '^version = ' Cargo.toml | cut -d'"' -f2)
if [ "$UPDATED" != "$NEW_VERSION" ]; then
    echo "❌ Failed to update version in Cargo.toml"
    exit 1
fi

echo "✅ Updated Cargo.toml to version $NEW_VERSION"

# Update CHANGELOG.md if it exists
if [ -f CHANGELOG.md ]; then
    TODAY=$(date -u +"%Y-%m-%d")
    
    if grep -q "^## \[Unreleased\]" CHANGELOG.md; then
        # Move [Unreleased] to new version section
        if [[ "$OSTYPE" == "darwin"* ]]; then
            sed -i '' "s/^## \[Unreleased\]/## \[$NEW_VERSION\] - $TODAY\n\n## \[Unreleased\]/" CHANGELOG.md
        else
            sed -i "s/^## \[Unreleased\]/## \[$NEW_VERSION\] - $TODAY\n\n## \[Unreleased\]/" CHANGELOG.md
        fi
        
        # Update comparison links
        REPO_URL=$(grep -m1 "^\[Unreleased\]:" CHANGELOG.md | cut -d' ' -f2 | cut -d'/' -f1-5)
        if [ -n "$REPO_URL" ]; then
            # Update [Unreleased] link
            if [[ "$OSTYPE" == "darwin"* ]]; then
                sed -i '' "s|^\[Unreleased\]: .*|\[Unreleased\]: $REPO_URL/compare/v$NEW_VERSION...HEAD|" CHANGELOG.md
            else
                sed -i "s|^\[Unreleased\]: .*|\[Unreleased\]: $REPO_URL/compare/v$NEW_VERSION...HEAD|" CHANGELOG.md
            fi
            
            # Add new version link if it doesn't exist
            if ! grep -q "^\[$NEW_VERSION\]:" CHANGELOG.md; then
                PREV_VERSION=$(grep "^## \[" CHANGELOG.md | head -2 | tail -1 | sed 's/## \[\(.*\)\].*/\1/')
                if [ -n "$PREV_VERSION" ] && [ "$PREV_VERSION" != "Unreleased" ]; then
                    if [[ "$OSTYPE" == "darwin"* ]]; then
                        sed -i '' "/^## \[$NEW_VERSION\]/a\\
[$NEW_VERSION]: $REPO_URL/compare/v$PREV_VERSION...v$NEW_VERSION" CHANGELOG.md
                    else
                        sed -i "/^## \[$NEW_VERSION\]/a\\
[$NEW_VERSION]: $REPO_URL/compare/v$PREV_VERSION...v$NEW_VERSION" CHANGELOG.md
                    fi
                else
                    if [[ "$OSTYPE" == "darwin"* ]]; then
                        sed -i '' "/^## \[$NEW_VERSION\]/a\\
[$NEW_VERSION]: $REPO_URL/releases/tag/v$NEW_VERSION" CHANGELOG.md
                    else
                        sed -i "/^## \[$NEW_VERSION\]/a\\
[$NEW_VERSION]: $REPO_URL/releases/tag/v$NEW_VERSION" CHANGELOG.md
                    fi
                fi
            fi
        fi
        echo "✅ Updated CHANGELOG.md"
    else
        echo "⚠️ No [Unreleased] section found in CHANGELOG.md"
    fi
else
    echo "⚠️ CHANGELOG.md not found, skipping update"
fi

echo ""
echo "✅ Version bump complete!"
echo ""
echo "Next steps:"
echo "  1. Review changes: git diff"
echo "  2. Commit: git add Cargo.toml CHANGELOG.md && git commit -m 'chore: bump version to $NEW_VERSION'"
echo "  3. Tag: git tag -a v$NEW_VERSION -m 'Release $NEW_VERSION'"
echo "  4. Push: git push origin main && git push origin v$NEW_VERSION"

