#!/usr/bin/env bash
# Bump a plugin's version across header, constant, CHANGELOG, CLAUDE.md.
# Usage: tools/bump-version.sh bw-<slug> <new-version>

source "$(dirname "$0")/lib/common.sh"

SLUG="${1:-}"
NEW="${2:-}"
[[ -n "$NEW" ]] || die "Usage: $0 bw-<slug> <new-version>"
require_slug "$SLUG"
[[ "$NEW" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || die "Version must be SemVer X.Y.Z (got '${NEW}')"

PLUGIN_DIR="${BW_PLUGINS_DIR}/${SLUG}"
MAIN="${PLUGIN_DIR}/${SLUG}.php"
OLD=$(plugin_header_version "$SLUG")
[[ -n "$OLD" ]] || die "Cannot read current version from ${MAIN}"

if ! semver_gt "$NEW" "$OLD"; then
	die "New version ${NEW} must be strictly greater than current ${OLD}"
fi

SLUG_UU=$(slug_to_upper_underscore "$SLUG")
DATE=$(date -u +%Y-%m-%d)

log_info "Bumping ${SLUG}: ${OLD} → ${NEW}"

# 1. Plugin header
sed -i -E "s|^(\s*\*\s*Version:\s*)${OLD}|\1${NEW}|" "$MAIN"

# 2. VERSION constant (if defined)
if grep -q "${SLUG_UU}_VERSION" "$MAIN"; then
	sed -i -E "s|(define\(\s*'${SLUG_UU}_VERSION'\s*,\s*')${OLD}(')|\1${NEW}\2|" "$MAIN"
fi

# 3. CHANGELOG.md
CL="${PLUGIN_DIR}/CHANGELOG.md"
if [[ -f "$CL" ]]; then
	# Replace [Unreleased] marker with new version section, keeping [Unreleased] at top.
	if grep -q '^## \[Unreleased\]' "$CL"; then
		awk -v ver="$NEW" -v date="$DATE" '
			/^## \[Unreleased\]/ {
				print "## [Unreleased]"; print ""
				print "## [" ver "] - " date
				next
			}
			{ print }
		' "$CL" > "${CL}.tmp" && mv "${CL}.tmp" "$CL"
	else
		# Prepend
		{
			echo "## [${NEW}] - ${DATE}"
			echo
			cat "$CL"
		} > "${CL}.tmp" && mv "${CL}.tmp" "$CL"
	fi
fi

# 4. CLAUDE.md header
CM="${PLUGIN_DIR}/CLAUDE.md"
if [[ -f "$CM" ]]; then
	sed -i -E "s|(\*\*Version:\*\*\s*)${OLD}|\1${NEW}|" "$CM"
	sed -i -E "s|(\*\*Last Updated:\*\*\s*)[0-9-]+|\1${DATE}|" "$CM"
fi

log_ok "Bumped to ${NEW}"
echo
echo "Next: edit ${CL} to document the actual changes, then:"
echo "  tools/release.sh ${SLUG} ${NEW}"
