.PHONY: help check test save-baselines example doc dist overleaf-check ctan release-check website clean

PACKAGE := texchanges
BUILD_DIR := build
DIST_DIR := dist

help:
	@printf '%s\n' \
	  'make check    Run the verification suite (TEST=<name> filters cases)' \
	  'make test     Alias for make check' \
	  'make save-baselines  Regenerate l3build .tlg baselines' \
	  'make example  Compile the explicit review example' \
	  'make doc      Compile the package manual' \
	  'make dist     Build the unified Overleaf-ready zip archive' \
	  'make overleaf-check  Validate the unified Overleaf bundle' \
	  'make ctan     Build the CTAN submission archive' \
	  'make release-check  Verify package, manual, archives, and website' \
	  'make website  Build the public documentation site' \
	  'make clean    Remove generated output'

check:
	TEST="$(TEST)" ./scripts/test.sh

test: check

example:
	mkdir -p $(BUILD_DIR)/explicit-review
	TEXINPUTS="$(CURDIR):" latexmk -pdf -halt-on-error \
	  -interaction=nonstopmode \
	  -outdir=$(BUILD_DIR)/explicit-review \
	  examples/explicit-review/texchanges-explicit-review.tex

doc:
	mkdir -p $(BUILD_DIR)
	latexmk -pdf -halt-on-error -interaction=nonstopmode \
	  -outdir=$(BUILD_DIR) texchanges-doc.tex

dist: clean
	$(MAKE) doc
	mkdir -p $(DIST_DIR) $(BUILD_DIR)/overleaf-workflow
	cp texchanges.sty examples/explicit-review/texchanges-explicit-review.tex \
	  examples/automatic-diff/texchanges-original.tex \
	  examples/automatic-diff/texchanges-revised.tex \
	  examples/automatic-diff/texchanges-review.tex \
	  examples/automatic-diff/latexmkrc \
	  $(BUILD_DIR)/overleaf-workflow/
	cp examples/overleaf-workflow/README.md $(BUILD_DIR)/overleaf-workflow/README.md
	(cd $(BUILD_DIR)/overleaf-workflow && zip -q ../../$(DIST_DIR)/$(PACKAGE)-overleaf.zip \
	  texchanges.sty texchanges-explicit-review.tex texchanges-original.tex \
	  texchanges-revised.tex texchanges-review.tex latexmkrc README.md)

overleaf-check: dist
	@task_tmp=$$(mktemp -d "$${TMPDIR:-/tmp}/texchanges-overleaf.XXXXXX"); \
	trap 'rm -rf "$$task_tmp"' EXIT; \
	unzip -t $(DIST_DIR)/$(PACKAGE)-overleaf.zip >/dev/null; \
	unzip -q $(DIST_DIR)/$(PACKAGE)-overleaf.zip -d "$$task_tmp"; \
	(cd "$$task_tmp" && \
	  latexmk -pdf -halt-on-error -interaction=nonstopmode texchanges-explicit-review.tex >/dev/null && \
	  latexmk -pdf -halt-on-error -interaction=nonstopmode texchanges-review.tex >/dev/null && \
	  pdftotext texchanges-explicit-review.pdf - | grep -Fq 'Texchanges Explicit Review' && \
	  pdftotext texchanges-review.pdf - | grep -Fq 'selected' && \
	  pdftotext texchanges-review.pdf - | grep -Fq 'adaptive' && \
	  test -f review-generated.tex)
	@task_tmp=$$(mktemp -d "$${TMPDIR:-/tmp}/texchanges-overleaf-jobname.XXXXXX"); \
	trap 'rm -rf "$$task_tmp"' EXIT; \
	unzip -q $(DIST_DIR)/$(PACKAGE)-overleaf.zip -d "$$task_tmp"; \
	(cd "$$task_tmp" && \
	  latexmk -pdf -jobname=output -halt-on-error -interaction=nonstopmode texchanges-explicit-review.tex >/dev/null && \
	  test -f output.pdf && \
	  rm -f output.* && \
	  latexmk -pdf -jobname=output -halt-on-error -interaction=nonstopmode texchanges-review.tex >/dev/null && \
	  test -f output.pdf && \
	  test -f review-generated.tex && \
	  pdftotext output.pdf - | grep -Fq 'adaptive')

ctan: doc
	./scripts/ctan-release.sh

website:
	npm --prefix website run build

release-check: check overleaf-check ctan website
	@for archive in $(DIST_DIR)/*.zip; do unzip -t "$$archive" >/dev/null; done
	@task_tmp=$$(mktemp -d "$${TMPDIR:-/tmp}/texchanges-checksums.XXXXXX"); \
	trap 'rm -rf "$$task_tmp"' EXIT; \
	cp $(DIST_DIR)/*.zip $(BUILD_DIR)/texchanges-doc.pdf "$$task_tmp"/; \
	cd "$$task_tmp" && \
	if command -v sha256sum >/dev/null 2>&1; then \
	  sha256sum *.zip texchanges-doc.pdf; \
	else \
	  shasum -a 256 *.zip texchanges-doc.pdf; \
	fi > "$(CURDIR)/$(DIST_DIR)/SHA256SUMS"
	@printf 'Texchanges release artifacts verified.\n'

save-baselines:
	l3build save $(TEST) < /dev/null

clean:
	l3build clean >/dev/null 2>&1 || true
	latexmk -C examples/explicit-review/texchanges-explicit-review.tex >/dev/null 2>&1 || true
	$(RM) \
	  examples/automatic-diff/review-generated.tex \
	  examples/automatic-diff/texchanges-review.aux \
	  examples/automatic-diff/texchanges-review.fdb_latexmk \
	  examples/automatic-diff/texchanges-review.fls \
	  examples/automatic-diff/texchanges-review.log \
	  examples/automatic-diff/texchanges-review.pdf
	rm -rf $(BUILD_DIR) $(DIST_DIR)
	find . -type d -name __pycache__ -prune -exec rm -rf {} +
