.PHONY: run
run:
	@uv run fastapi dev core_framework/asgi.py

.PHONY: run-check-threads
run-check-threads:
	@uv run python -m core_framework.main

.PHONY: alembic
alembic:
	@uv run cf-alembic

.PHONY: ruff
ruff:
	@uv run ruff check --fix .
	@uv run ruff format .

.PHONY: ty
ty:
	@uv run ty check

.PHONY: vulture
vulture:
	@uv run vulture core_framework/ --min-confidence 60

.PHONY: test
test:
	@echo "Starting Firebase Emulator..."
	@firebase emulators:start --only auth --project=test > /dev/null 2>&1 & \
	EMULATOR_PID=$$!; \
	sleep 3; \
	echo "Running unit and integration tests with emulator..."; \
	FIREBASE_AUTH_EMULATOR_HOST=127.0.0.1:9099 uv run pytest tests/unit tests/integration -n 2; \
	TEST_EXIT=$$?; \
	echo "Stopping emulator..."; \
	kill $$EMULATOR_PID 2>/dev/null || true; \
	exit $$TEST_EXIT

.PHONY: test-e2e
test-e2e:
	@uv run pytest tests/e2e

.PHONY: coverage
coverage:
	@echo "Starting Firebase Emulator..."
	@firebase emulators:start --only auth --project=test > /dev/null 2>&1 & \
	EMULATOR_PID=$$!; \
	sleep 3; \
	echo "Running unit and integration coverage with emulator..."; \
	FIREBASE_AUTH_EMULATOR_HOST=127.0.0.1:9099 uv run pytest tests/unit tests/integration -n 2 \
		--cov=core_framework \
		--cov-branch \
		--cov-report=term-missing:skip-covered \
		--cov-report=html:htmlcov; \
	TEST_EXIT=$$?; \
	if [ -f htmlcov/index.html ]; then \
		COV_HTML_PORT=$${COV_HTML_PORT:-8765}; \
		COV_PID_FILE="/tmp/core-framework-coverage-html.pid"; \
		if [ -f "$$COV_PID_FILE" ] && kill -0 $$(cat "$$COV_PID_FILE") 2>/dev/null; then \
			kill $$(cat "$$COV_PID_FILE") 2>/dev/null || true; \
		fi; \
		nohup uv run python -m http.server "$$COV_HTML_PORT" --directory htmlcov >/dev/null 2>&1 & \
		echo $$! > "$$COV_PID_FILE"; \
		echo "Wrote HTML report to http://127.0.0.1:$$COV_HTML_PORT/index.html"; \
	fi; \
	echo "Stopping emulator..."; \
	kill $$EMULATOR_PID 2>/dev/null || true; \
	exit $$TEST_EXIT
