LANG=en_US.utf-8

export LANG

.PHONY: uv.lock
uv.lock: ## Locks dependencies and updates uv.lock on the local file system
	docker compose --progress=plain build --no-cache --build-arg RUN_UV_LOCK=true dev && \
	docker compose --progress=plain run --rm dev sh -c "cp -f /tmp/uv.lock /usr/src/cmshteial2reader/uv.lock"

.PHONY:devdocker
devdocker: ## Builds the docker for dev
	docker compose build

.PHONY:init
init: uv.lock devdocker up setup-pre-commit  ## Initializes the local developer environment

.PHONY: up
up:
	docker compose up --build -d --remove-orphans

.PHONY: down
down:
	docker compose down

.PHONY:clean-pre-commit
clean-pre-commit: ## removes pre-commit hook
	rm -f .git/hooks/pre-commit

.PHONY:setup-pre-commit
setup-pre-commit:
	cp ./pre-commit-hook ./.git/hooks/pre-commit && \
	chmod +x ./.git/hooks/pre-commit

.PHONY:run-pre-commit
run-pre-commit: setup-pre-commit
	./.git/hooks/pre-commit

.PHONY:update
update: down uv.lock setup-pre-commit  ## Updates all the packages using pyproject.toml
	make devdocker

.PHONY:tests
tests: up
	docker compose run --rm --name cmshteial2reader dev pytest tests cmshteial2reader

.PHONY:shell
shell:devdocker ## Brings up the bash shell in dev docker
	docker compose run --rm --name cmshteial2reader dev sh

.PHONY:build
build:
	docker compose run --rm --name cmshteial2reader dev rm -rf dist/
	docker compose run --rm --name cmshteial2reader dev python3 -m build

.PHONY:testpackage
testpackage:build
	docker compose run --rm --name cmshteial2reader dev python3 -m twine upload -u __token__ --repository testpypi dist/*
# password can be set in TWINE_PASSWORD. https://twine.readthedocs.io/en/latest/

.PHONY:package
package:build
	docker compose run --rm --name cmshteial2reader dev python3 -m twine upload -u __token__ --repository pypi dist/*
# password can be set in TWINE_PASSWORD. https://twine.readthedocs.io/en/latest/ (note this is the token not your password)

.PHONY: third-party-notices
third-party-notices: ## Regenerate THIRD-PARTY-NOTICES.md from the current dependency tree
	@echo "# Third-Party Notices" > THIRD-PARTY-NOTICES.md
	@echo "" >> THIRD-PARTY-NOTICES.md
	@echo "This file is generated by \`make third-party-notices\` — do not hand-edit." >> THIRD-PARTY-NOTICES.md
	@echo "" >> THIRD-PARTY-NOTICES.md
	@echo "## Python dependencies" >> THIRD-PARTY-NOTICES.md
	@echo "" >> THIRD-PARTY-NOTICES.md
	uv run pip-licenses --format=markdown --with-urls >> THIRD-PARTY-NOTICES.md

.DEFAULT_GOAL := help
.PHONY: help
help: ## Show this help.
	# from https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
