.PHONY: all setup install pre-commit test test-unit lint format format-check \
	lock-check build example-smoke clean

all: test

setup: install pre-commit

install:
	@echo "Installing dependencies..."
	uv sync

pre-commit: install
	@echo "Setting up pre-commit..."
	uv run pre-commit install -t commit-msg -t pre-commit

test: lock-check lint format-check test-unit

lint:
	@echo "Checking code with Ruff..."
	uv run ruff check .

format:
	@echo "Formatting code with Ruff..."
	uv run ruff format .
	uv run ruff check --fix .

format-check:
	@echo "Checking formatting with Ruff..."
	uv run ruff format --check .

test-unit:
	@echo "Running unit tests with coverage..."
	uv run pytest --cov=bnn --cov-report=term-missing

lock-check:
	uv lock --check

build:
	uv build

example-smoke:
	uv run python -c "from bnn.examples.fully_bayesian import DummyDataset, FullyBayesianNeuralNetwork; from bnn.utils import BayesNetTrainer; from torch.utils.data import DataLoader; ds=DummyDataset(samples_per_class=1); net=FullyBayesianNeuralNetwork(); trainer=BayesNetTrainer(net=net, task='classification'); x,y=next(iter(DataLoader(ds,batch_size=3))); trainer.fit(x,y,batch_idx=1,total_batches=1,samples=1); pred,_,_=trainer.predict(x,samples=1); assert tuple(pred.shape) == (3, 3)"

clean:
	uv run python -c "import shutil; from pathlib import Path; [shutil.rmtree(path, ignore_errors=True) for path in (Path('build'), Path('dist'), Path('htmlcov'))]"
