.PHONY: install test test-module lint clean format type-check installer-mac installer-win check

install:
	pip install -e ".[dev]"

test:
	uv run pytest -p pytest_mock -v

# Run tests for a specific module
# Usage: make test-module m=path/to/module.py [cov=module_path]
test-module:
	@if [ -z "$(m)" ]; then \
		echo "Usage: make test-module m=path/to/module.py [cov=module_path]"; \
		exit 1; \
	fi; \
	if [ -z "$(cov)" ]; then \
		uv run pytest $(m) -v; \
	else \
		uv run pytest $(m) -v --cov=$(cov); \
	fi

lint:
	ruff check . --fix

type-check:
	uv run pyright

clean:
	find . -type f -name '*.pyc' -delete
	find . -type d -name '__pycache__' -exec rm -r {} +
	rm -rf installer/build/
	rm -rf installer/dist/
	rm -f rw.*.dmg
	rm -rf dist
	rm -rf installer/build
	rm -rf installer/dist
	rm -f .coverage.*

format:
	uv run ruff format .

# run inspector tool
run-inspector:
	uv run mcp dev src/basic_memory/mcp/main.py

# Build app installer
installer-mac:
	cd installer && chmod +x make_icons.sh && ./make_icons.sh
	cd installer && uv run python setup.py bdist_mac

installer-win:
	cd installer && uv run python setup.py bdist_win32


update-deps:
	uv lock --upgrade

check: lint  format type-check test


# Target for generating Alembic migrations with a message from command line
migration:
	@if [ -z "$(m)" ]; then \
		echo "Usage: make migration m=\"Your migration message\""; \
		exit 1; \
	fi; \
	cd src/basic_memory/alembic && alembic revision --autogenerate -m "$(m)"