.PHONY: help install dev dev-api dev-dashboard build-dashboard \
        docker-build docker-build-api docker-build-lambda docker-up docker-down \
        typecheck lint fmt test ci_lint_and_test ci_lint_and_test_clean

PORT    ?= 8080
VERSION ?= local

help:
	@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

install:
	uv sync
	cd dashboard && bun install

dev:
	$(MAKE) -j2 dev-api dev-dashboard

dev-api:
	uv run uvicorn resonance_engine.api.main:app --reload --port 8000

dev-dashboard:
	cd dashboard && bun run dev

build-dashboard:
	cd dashboard && bun run build

docker-build: docker-build-api docker-build-lambda  ## Build all Docker images

docker-build-api:  ## Build API Docker image
	docker build -f Dockerfile.api --build-arg version=$(VERSION) -t resonance-engine-api:$(VERSION) .

docker-build-lambda:  ## Build Lambda Docker image
	docker build -f Dockerfile.lambda --build-arg version=$(VERSION) -t resonance-engine-lambda:$(VERSION) .

docker-up:  ## Start API via Docker Compose
	VERSION=$(VERSION) PORT=$(PORT) docker compose up --build

docker-down:  ## Stop Docker Compose services
	docker compose down

typecheck:
	uv run ty check
	cd dashboard && bun run typecheck

lint: ## Run code linters
	uv run ruff check
	uv run ruff format --check
	cd dashboard && bun run check

fmt: ## Run code formatters
	uv run ruff check --fix
	uv run ruff format
	cd dashboard && bun run fmt

test:
	uv run pytest

ci_lint_and_test:  ## Run linters and unit tests inside Docker
	docker compose run --rm --build lint-and-test

ci_lint_and_test_clean:  ## Shutdown docker linters and unit tests
	docker compose down --remove-orphans
