PY_SRC := xerini
TEST_SUITE := $(wildcard *test_*.py)
DOCS := docs
CC = python
PPM = uv
POETRY = uvx poetry
BLACK = $(PPM) run black
LINT = $(PPM) run pylint
STATIC = $(PPM) run mypy
TEST = $(PPM) run pytest

all: ready clean

black: $(PY_SRC) $(TEST_SUITE)
	$(BLACK) .

static: $(PY_SRC)
	$(STATIC) $(PY_SRC)

lint: $(PY_SRC)
	$(LINT) $(PY_SRC)

test: $(PY_SRC) $(TEST_SUITE)
	$(TEST) -vv

coverage: $(PY_SRC) $(TEST_SUITE)
	rm -rf htmlcov
	$(TEST) -vv --junitxml=test_results.xml --cov-report xml:test_coverage.xml --cov-report=term --cov-report=html --cov-branch --cov-report term-missing --cov=$(PY_SRC) tests

dox: $(DOCS) coverage
	rm -rf public
	$(PPM) run mkdocs build

deploy: dox
	(cd $(DOCS); $(PPM) run pyreverse -ASmy --colorized -o svg -p xerini ../$(PY_SRC);)
	$(PPM) run mkdocs build --strict --verbose


build: $(PY_SRC) $(TEST_SUITE)
	rm -rf dist
	$(PPM) build

puml: $(PY_SRC)
	py2puml $(PY_SRC) $(PY_SRC) > docs/sciurus.puml
	pyreverse -o svg -p sciurus sciurus -ASmy --colorized
	mv classes_sciurus.svg $(DOCS)/classes_sciurus.svg
	mv packages_sciurus.svg $(DOCS)/packages_sciurus.svg

clean:
	rm -rf `find . -name __pycache__`
	rm -f `find . -type f -name '*.py[co]'`
ready: black lint static test coverage dox

.PHONY: clean ready
