.PHONY: install test test-core test-django test-fastapi test-react test-afi test-integration docker-up docker-down clean

CORE = cores/mizan-python
DJANGO = backends/mizan-django
FASTAPI = backends/mizan-fastapi
REACT = frontends/mizan-react
AFI = tests/afi

# ─── Setup ───────────────────────────────────────────────────────────────────

install:
	cd $(CORE) && uv pip install -e .
	cd $(DJANGO) && uv pip install -e ".[dev,channels]"
	cd $(FASTAPI) && uv pip install -e ".[dev]"
	cd $(REACT) && npm install

# ─── Unit Tests ──────────────────────────────────────────────────────────────

test: test-core test-django test-fastapi test-react test-afi

test-core:
	cd $(CORE) && uv run --extra dev pytest

test-django:
	cd $(DJANGO) && uv run pytest

test-fastapi:
	cd $(FASTAPI) && uv run pytest

test-react:
	cd $(REACT) && npm test

# AFI conformance — verifies mizan-django and mizan-fastapi emit equivalent
# schemas for the same @client fixture. Substrate-level gate, not e2e.
test-afi:
	cd $(AFI) && uv run pytest

# ─── Integration Tests ──────────────────────────────────────────────────────

test-integration: docker-up
	@echo "Waiting for backend..."
	@timeout 30 sh -c 'until curl -sf http://localhost:8000/api/mizan/session/ > /dev/null 2>&1; do sleep 1; done'
	cd $(REACT) && npm run test:integration
	@$(MAKE) docker-down

# ─── Docker ──────────────────────────────────────────────────────────────────

docker-up:
	docker compose -f examples/django-react-site/docker-compose.test.yml up -d --build
	@echo "Backend starting at http://localhost:8000"

docker-down:
	docker compose -f examples/django-react-site/docker-compose.test.yml down

# ─── All ─────────────────────────────────────────────────────────────────────

test-all: test test-integration

# ─── Cleanup ─────────────────────────────────────────────────────────────────

clean:
	docker compose -f examples/django-react-site/docker-compose.test.yml down -v --remove-orphans 2>/dev/null || true
	rm -rf $(DJANGO)/src/mizan.egg-info $(DJANGO)/dist $(DJANGO)/build
	rm -rf $(REACT)/dist $(REACT)/node_modules
	rm -f examples/django-react-site/backend/db.sqlite3
