# Makefile for Firehose app

MISE_BIN ?= $(HOME)/.local/bin/mise
MISE_EXEC = $(MISE_BIN) exec --

.PHONY: check precommit deps compile test format credo

# Run all static analysis checks (no database required)
check: credo format

# Precommit target for CI/pre-commit hooks
precommit: check compile

# Sync dependencies
deps:
	$(MISE_EXEC) mix deps.get

# Compile the project
compile:
	$(MISE_EXEC) mix compile --warnings-as-errors

# Run tests (requires PostgreSQL running on localhost:5432)
# Note: If you don't have PostgreSQL, you can skip tests with `make check`
test: deps compile
	$(MISE_EXEC) mix test

# Format code
format:
	$(MISE_EXEC) mix format

# =============================================================================
# Playwright e2e browser tests
# =============================================================================
#
# Requires the Phoenix dev server running on the default port (8056).
# Set PLAYWRIGHT_BASE_URL to point at a different server/port.
#
# Available browsers (local):
#   PLAYWRIGHT_BROWSER=firefox   (default — works on macOS 15)
#   PLAYWRIGHT_BROWSER=chromium  (crashes on macOS 15, use Docker Chrome)
#   PLAYWRIGHT_BROWSER=webkit
#
# Docker Chrome (alternative):
#   1. docker compose -f docker-compose.chrome.yml up -d
#   2. PLAYWRIGHT_BROWSERS_PATH=assets/node_modules/playwright-core/.local-browsers \
#      npx playwright test --config=playwright.docker.config.ts
#
# =============================================================================

# Run Playwright e2e tests (default: local Firefox)
# Usage: make playwright
#        PLAYWRIGHT_BROWSER=chromium make playwright
playwright:
	cd assets && PLAYWRIGHT_BROWSERS_PATH=node_modules/playwright-core/.local-browsers npx playwright test --config=../playwright.config.ts

# Run a specific Playwright test file
# Usage: make playwright-test test/e2e/smoke.spec.ts
playwright-test:
	cd assets && PLAYWRIGHT_BROWSERS_PATH=node_modules/playwright-core/.local-browsers npx playwright test --config=../playwright.config.ts $(filter-out $@,$(MAKECMDGOALS))

# Run Playwright tests with UI mode (headed browser)
playwright-ui:
	cd assets && PLAYWRIGHT_BROWSERS_PATH=node_modules/playwright-core/.local-browsers npx playwright test --config=../playwright.config.ts --ui

# Show last Playwright HTML report
playwright-report:
	cd assets && npx playwright show-report

# Start Docker Chrome container for remote Playwright
playwright-docker-start:
	docker compose -f docker-compose.chrome.yml up -d

# Stop Docker Chrome container
playwright-docker-stop:
	docker compose -f docker-compose.chrome.yml down

# Run Playwright against Docker Chrome (container must be running)
playwright-docker:
	cd assets && PLAYWRIGHT_BROWSERS_PATH=node_modules/playwright-core/.local-browsers npx playwright test --config=../playwright.docker.config.ts

# Run full end-to-end workflow: start Docker Chrome, run tests, stop container
playwright-full: playwright-docker-start
	@echo "Waiting for Chrome to be ready..."
	@sleep 3
	cd assets && PLAYWRIGHT_BROWSERS_PATH=node_modules/playwright-core/.local-browsers npx playwright test --config=../playwright.docker.config.ts; \
		EXIT_CODE=$$?; \
		cd ..; \
		docker compose -f docker-compose.chrome.yml down; \
		exit $$EXIT_CODE

# =============================================================================
# Static analysis
# =============================================================================

# Run Credo static analysis
credo:
	$(MISE_EXEC) mix credo --strict