## Karma-Lens build/release Makefile.
##
## Defaults to a prod-ready (logs OFF) vsix at the current package.json
## version. Use bump-* targets to increment version. Use `make dev` to ship
## a debug vsix (logs ON) WITHOUT publishing.

PKG     := package.json
LOGGER  := src/utils/logger.ts
VERSION := $(shell node -p "require('./$(PKG)').version")
NAME    := $(shell node -p "require('./$(PKG)').name")
VSIX    := $(NAME)-$(VERSION).vsix

# In-place sed differs between BSD (macOS) and GNU. Use a portable form.
SED_INPLACE := sed -i ''

.PHONY: help build prod dev clean install \
        bump-patch bump-minor bump-major \
        logs-on logs-off typecheck publish version

help:
	@echo "make build         — typecheck + package vsix at current version (logs OFF)"
	@echo "make dev           — typecheck + package vsix with logs ON (no version bump)"
	@echo "make prod          — alias of build"
	@echo "make bump-patch    — npm version patch + build"
	@echo "make bump-minor    — npm version minor + build"
	@echo "make bump-major    — npm version major + build"
	@echo "make logs-on       — flip Logger.*_ENABLED to true (no build)"
	@echo "make logs-off      — flip Logger.*_ENABLED to false (no build)"
	@echo "make typecheck     — tsc --noEmit"
	@echo "make clean         — delete all *.vsix in this directory"
	@echo "make install       — code --install-extension <latest vsix>"
	@echo "make publish       — vsce publish (requires PAT)"
	@echo "make version       — print current version"

version:
	@echo $(VERSION)

typecheck:
	@npx tsc --noEmit

logs-on:
	@$(SED_INPLACE) -e 's/private static readonly DEBUG_ENABLED = false;/private static readonly DEBUG_ENABLED = true;/' \
	                -e 's/private static readonly VERBOSE_ENABLED = false;/private static readonly VERBOSE_ENABLED = true;/' \
	                $(LOGGER)
	@echo "logger: DEBUG=true VERBOSE=true"

logs-off:
	@$(SED_INPLACE) -e 's/private static readonly DEBUG_ENABLED = true;/private static readonly DEBUG_ENABLED = false;/' \
	                -e 's/private static readonly VERBOSE_ENABLED = true;/private static readonly VERBOSE_ENABLED = false;/' \
	                $(LOGGER)
	@echo "logger: DEBUG=false VERBOSE=false"

build prod: logs-off typecheck
	@npx vsce package --no-dependencies
	@echo "built: $(VSIX)"

dev: logs-on typecheck
	@npx vsce package --no-dependencies
	@echo "built (logs ON): $(VSIX)"
	@$(MAKE) -s logs-off

bump-patch:
	@npm version patch --no-git-tag-version --allow-same-version
	@$(MAKE) -s build

bump-minor:
	@npm version minor --no-git-tag-version --allow-same-version
	@$(MAKE) -s build

bump-major:
	@npm version major --no-git-tag-version --allow-same-version
	@$(MAKE) -s build

clean:
	@rm -f $(NAME)-*.vsix
	@echo "cleaned: $(NAME)-*.vsix"

install:
	@latest=$$(ls -t $(NAME)-*.vsix 2>/dev/null | head -1); \
	if [ -z "$$latest" ]; then echo "no vsix found; run 'make build'"; exit 1; fi; \
	code --install-extension $$latest --force; \
	echo "installed: $$latest"

publish: build
	@npx vsce publish --no-dependencies
