.PHONY: dev daemon build test migrate-up migrate-down sqlc seed clean setup start stop check

# ---------- One-click commands ----------

# First-time setup: install deps, start DB, run migrations, seed data
setup:
	@echo "==> Installing dependencies..."
	pnpm install
	@echo "==> Starting PostgreSQL..."
	@if pg_isready -h localhost -p 5432 -U multica > /dev/null 2>&1; then \
		echo "    PostgreSQL already running, skipping docker compose up."; \
	else \
		docker compose up -d; \
		echo "==> Waiting for PostgreSQL to be ready..."; \
		until docker compose exec -T postgres pg_isready -U multica > /dev/null 2>&1; do \
			sleep 1; \
		done; \
	fi
	@echo "==> Running migrations..."
	cd server && go run ./cmd/migrate up
	@echo "==> Seeding data..."
	cd server && go run ./cmd/seed
	@echo ""
	@echo "✓ Setup complete! Run 'make start' to launch the app."

# Start all services (backend + frontend)
start:
	@if pg_isready -h localhost -p 5432 -U multica > /dev/null 2>&1; then \
		echo "PostgreSQL already running, skipping docker compose up."; \
	else \
		docker compose up -d; \
		until docker compose exec -T postgres pg_isready -U multica > /dev/null 2>&1; do \
			sleep 1; \
		done; \
	fi
	@echo "Starting backend and frontend..."
	@trap 'kill 0' EXIT; \
		(cd server && go run ./cmd/server) & \
		pnpm dev:web & \
		wait

# Stop all services
stop:
	@echo "Stopping services..."
	@-lsof -ti:8080 | xargs kill -9 2>/dev/null
	@-lsof -ti:3000 | xargs kill -9 2>/dev/null
	docker compose down
	@echo "✓ All services stopped."

# Full verification: typecheck + unit tests + Go tests + E2E
check:
	@bash scripts/check.sh

# ---------- Individual commands ----------

# Go server
dev:
	cd server && go run ./cmd/server

daemon:
	cd server && go run ./cmd/daemon

build:
	cd server && go build -o bin/server ./cmd/server
	cd server && go build -o bin/daemon ./cmd/daemon

test:
	cd server && go test ./...

# Database
migrate-up:
	cd server && go run ./cmd/migrate up

migrate-down:
	cd server && go run ./cmd/migrate down

sqlc:
	cd server && sqlc generate

seed:
	cd server && go run ./cmd/seed

# Cleanup
clean:
	rm -rf server/bin server/tmp
