# Makefile for llmfit
# Convenience commands for building, testing, and updating the model database

.PHONY: help build release clean run test update-models update-docker-models update-catalogs check fmt clippy install

# Default target
help:
	@echo "llmfit - LLM Model Fit Analyzer"
	@echo ""
	@echo "Available targets:"
	@echo "  make build          - Build debug binary"
	@echo "  make release        - Build release binary"
	@echo "  make run            - Run in TUI mode (debug)"
	@echo "  make test           - Run all unit tests"
	@echo "  make update-models  - Fetch latest model data from HuggingFace"
	@echo "  make update-docker-models - Refresh Docker Model Runner catalog"
	@echo "  make update-catalogs - Refresh all catalogs (HF models + Docker) and rebuild"
	@echo "  make check          - Run cargo check"
	@echo "  make fmt            - Format code with rustfmt"
	@echo "  make clippy         - Run clippy linter"
	@echo "  make clean          - Remove build artifacts"
	@echo "  make install        - Install release binary to ~/.cargo/bin"
	@echo ""

# Build debug version
build:
	cargo build

# Build release version
release:
	cargo build --release

# Clean build artifacts
clean:
	cargo clean

# Run in TUI mode
run:
	cargo run

# Run tests
test:
	cargo test

# Update model database from HuggingFace
update-models:
	@./scripts/update_models.sh

# Refresh Docker Model Runner catalog from Docker Hub
update-docker-models:
	python3 scripts/scrape_docker_models.py

# Refresh all catalogs (HF models + Docker) and rebuild
# Runs HF scraper first (via update_models.sh which also rebuilds),
# then Docker scraper (which depends on hf_models.json), then rebuilds again
# to embed the updated Docker catalog.
update-catalogs:
	@./scripts/update_models.sh
	python3 scripts/scrape_docker_models.py
	cargo build --release

# Check compilation without building
check:
	cargo check

# Format code
fmt:
	cargo fmt

# Run clippy
clippy:
	cargo clippy -- -D warnings

# Install to ~/.cargo/bin
install:
	cargo install --path .
