define USAGE
lgrep - Local semantic search CLI ⚙️

Commands:
	setup            Install dependencies with uv (fastembed, lightweight)
	setup-dev        Install with dev tools
	setup-torch      Install with sentence-transformers (optional, heavier)
	setup-torch-cpu  Install sentence-transformers CPU-only (no NVIDIA)
	lock             Generate requirements.txt
	test             Run tests
	lint             Run linting with ruff
	format           Format code with black and isort
	clean            Remove build artifacts
	docker           Build the docker image
	run              Run lgrep in docker with mounted dirs
	tag              Make a git tag using version from pyproject.toml
	help             Show this help message

endef

export USAGE
.EXPORT_ALL_VARIABLES:
GIT_TAG := $(shell git describe --tags 2>/dev/null || echo "v0.0.0")
BUILD := $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown")
VERSION := $(shell grep -m1 'version = ' pyproject.toml | cut -d'"' -f2)
PROJECTNAME := lgrep
DOCKERID := $(shell echo "nuxion")

.PHONY: help
help:
	@echo "$$USAGE"

.PHONY: setup
setup:
	uv venv
	uv pip install -e .

.PHONY: setup-dev
setup-dev:
	uv venv
	uv pip install -e ".[dev,openai]"

.PHONY: setup-torch
setup-torch:
	uv venv
	uv pip install -e ".[dev,openai,sentence-transformers]"

.PHONY: setup-torch-cpu
setup-torch-cpu:
	uv venv
	uv pip install torch --index-url https://download.pytorch.org/whl/cpu
	uv pip install -e ".[dev,openai,sentence-transformers]"

.PHONY: clean
clean:
	find . ! -path "./.eggs/*" -name "*.pyc" -exec rm {} \;
	find . ! -path "./.eggs/*" -name "*.pyo" -exec rm {} \;
	find . ! -path "./.eggs/*" -name ".coverage" -exec rm {} \;
	rm -rf build/* > /dev/null 2>&1
	rm -rf dist/* > /dev/null 2>&1
	rm -rf *.egg-info > /dev/null 2>&1
	rm -rf .pytest_cache > /dev/null 2>&1
	rm -rf .ruff_cache > /dev/null 2>&1
	rm -rf .mypy_cache > /dev/null 2>&1
	rm -rf htmlcov > /dev/null 2>&1
	rm -rf .coverage > /dev/null 2>&1

.PHONY: lock
lock:
	uv pip compile pyproject.toml -o requirements.txt

.PHONY: lock-dev
lock-dev:
	uv pip compile pyproject.toml --extra dev -o requirements-dev.txt

.PHONY: lint
lint:
	ruff check src tests

.PHONY: lint-fix
lint-fix:
	ruff check --fix src tests

.PHONY: typecheck
typecheck:
	mypy src/lgrep

.PHONY: black
black:
	black src tests

.PHONY: isort
isort:
	isort src tests --profile=black

.PHONY: format
format: isort black

.PHONY: test
test:
	PYTHONPATH=$(PWD)/src pytest tests/ -v

.PHONY: test-cov
test-cov:
	PYTHONPATH=$(PWD)/src pytest --cov-report xml --cov-report html --cov=lgrep tests/

.PHONY: docker
docker:
	docker build . -t ${DOCKERID}/${PROJECTNAME}
	docker tag ${DOCKERID}/${PROJECTNAME} ${DOCKERID}/${PROJECTNAME}:${VERSION}

.PHONY: docker-build
docker-build:
	docker build . -t ${PROJECTNAME}:${VERSION} -t ${PROJECTNAME}:latest

.PHONY: run
run:
	docker run --rm -it -v $(PWD):/workspace ${PROJECTNAME}:latest $(ARGS)

.PHONY: run-index
run-index:
	docker run --rm -v $(PWD):/workspace ${PROJECTNAME}:latest index .

.PHONY: run-search
run-search:
	docker run --rm -v $(PWD):/workspace ${PROJECTNAME}:latest search "$(QUERY)"

.PHONY: tag
tag:
	git tag -a v${VERSION} -m "Release v${VERSION}"
	@echo "Created tag v${VERSION}"
	@echo "Run 'git push origin v${VERSION}' to push the tag"

.PHONY: publish
publish:
	docker push ${DOCKERID}/${PROJECTNAME}:${VERSION}
	docker push ${DOCKERID}/${PROJECTNAME}:latest
