PREFIX ?= /usr/local
BINARY = auge
VERSION_FILE = .version

.PHONY: check-toolchain build install uninstall clean bump-patch bump-minor bump-major generate-build-info update-readme version release-minor release-major package-release-asset print-release-asset print-release-sha256 update-homebrew-formula

# --- Environment checks ---

check-toolchain:
	@sdk=$$(xcrun --show-sdk-version 2>/dev/null || echo "missing"); \
	devdir=$$(xcode-select -p 2>/dev/null || echo "missing"); \
	os_ver=$$(sw_vers -productVersion 2>/dev/null || echo "unknown"); \
	if [ "$$sdk" = "missing" ]; then \
		echo ""; \
		echo "error: auge could not determine your active Apple SDK version."; \
		echo "Selected developer dir: $$devdir"; \
		echo "Install or update Command Line Tools, then retry."; \
		echo ""; \
		echo "Checks:"; \
		echo "  xcode-select -p"; \
		echo "  xcrun --show-sdk-version"; \
		echo "  xcode-select --install"; \
		exit 1; \
	fi

# --- Build (auto-bumps patch) ---

build: check-toolchain bump-patch generate-build-info update-readme
	swift build -c release

install: build
	@if [ -w "$(PREFIX)/bin" ]; then \
		install .build/release/$(BINARY) $(PREFIX)/bin/$(BINARY); \
	else \
		sudo install .build/release/$(BINARY) $(PREFIX)/bin/$(BINARY); \
	fi
	@echo "installed: $$($(PREFIX)/bin/$(BINARY) --version)"

# --- Version bumps ---

bump-patch:
	@v=$$(cat $(VERSION_FILE)); \
	major=$$(echo $$v | cut -d. -f1); \
	minor=$$(echo $$v | cut -d. -f2); \
	patch=$$(echo $$v | cut -d. -f3); \
	new="$$major.$$minor.$$((patch+1))"; \
	echo "$$new" > $(VERSION_FILE); \
	echo "$$v -> $$new"

bump-minor:
	@v=$$(cat $(VERSION_FILE)); \
	major=$$(echo $$v | cut -d. -f1); \
	minor=$$(echo $$v | cut -d. -f2); \
	new="$$major.$$((minor+1)).0"; \
	echo "$$new" > $(VERSION_FILE); \
	echo "$$v -> $$new"

bump-major:
	@v=$$(cat $(VERSION_FILE)); \
	major=$$(echo $$v | cut -d. -f1); \
	new="$$((major+1)).0.0"; \
	echo "$$new" > $(VERSION_FILE); \
	echo "$$v -> $$new"

# --- Release targets (bump without extra patch increment) ---

release-minor: check-toolchain bump-minor generate-build-info update-readme
	swift build -c release

release-major: check-toolchain bump-major generate-build-info update-readme
	swift build -c release

# --- Generated files ---

generate-build-info:
	@v=$$(cat $(VERSION_FILE)); \
	commit=$$(git rev-parse --short HEAD 2>/dev/null || echo "unknown"); \
	branch=$$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown"); \
	date=$$(date -u +"%Y-%m-%d %H:%M:%S UTC"); \
	swift_ver=$$(swift --version 2>/dev/null | head -1 | sed 's/.*version //' | sed 's/ .*//'); \
	os_ver=$$(sw_vers -productVersion 2>/dev/null || echo "unknown"); \
	echo "// Auto-generated by make — do not edit" > Sources/BuildInfo.swift; \
	echo "let buildVersion = \"$$v\"" >> Sources/BuildInfo.swift; \
	echo "let buildCommit = \"$$commit\"" >> Sources/BuildInfo.swift; \
	echo "let buildBranch = \"$$branch\"" >> Sources/BuildInfo.swift; \
	echo "let buildDate = \"$$date\"" >> Sources/BuildInfo.swift; \
	echo "let buildSwiftVersion = \"$$swift_ver\"" >> Sources/BuildInfo.swift; \
	echo "let buildOS = \"macOS $$os_ver\"" >> Sources/BuildInfo.swift

update-readme:
	@v=$$(cat $(VERSION_FILE)); \
	sed -i '' 's/Version [0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/Version '"$$v"'/' README.md 2>/dev/null || true; \
	sed -i '' 's/version-[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*-blue/version-'"$$v"'-blue/' README.md 2>/dev/null || true

# --- Utilities ---

version:
	@cat $(VERSION_FILE)

uninstall:
	@if [ -w "$(PREFIX)/bin" ]; then \
		rm -f $(PREFIX)/bin/$(BINARY); \
	else \
		sudo rm -f $(PREFIX)/bin/$(BINARY); \
	fi

clean:
	swift package clean

package-release-asset:
	@v=$$(cat $(VERSION_FILE)); \
	asset="auge-$$v-arm64-macos.tar.gz"; \
	if [ ! -x ".build/release/$(BINARY)" ]; then \
		echo "error: missing .build/release/$(BINARY). Build a release binary first."; \
		exit 1; \
	fi; \
	tar -C .build/release -czf "$$asset" $(BINARY); \
	echo "$$asset"

print-release-asset:
	@v=$$(cat $(VERSION_FILE)); \
	echo "auge-$$v-arm64-macos.tar.gz"

print-release-sha256:
	@v=$$(cat $(VERSION_FILE)); \
	asset="auge-$$v-arm64-macos.tar.gz"; \
	if [ ! -f "$$asset" ]; then \
		echo "error: missing $$asset. Run make package-release-asset first."; \
		exit 1; \
	fi; \
	shasum -a 256 "$$asset" | awk '{print $$1}'

update-homebrew-formula:
	@if [ -z "$(HOMEBREW_FORMULA_OUTPUT)" ]; then \
		echo "error: set HOMEBREW_FORMULA_OUTPUT=/path/to/Formula/auge.rb"; \
		exit 1; \
	fi
	@if [ -z "$(HOMEBREW_FORMULA_SHA256)" ]; then \
		echo "error: set HOMEBREW_FORMULA_SHA256=<sha256>"; \
		exit 1; \
	fi
	@./scripts/write-homebrew-formula.sh \
		--version "$$(cat $(VERSION_FILE))" \
		--sha256 "$(HOMEBREW_FORMULA_SHA256)" \
		--output "$(HOMEBREW_FORMULA_OUTPUT)"
