.PHONY: help test test-integration test-all test-stop build build-force clean rebuild logs test-env-up test-env-down

# Include .env file for environment variables (single source of truth)
# Ignore if .env doesn't exist yet
ifneq (,$(wildcard ./.env))
    include .env
    export
endif

# Default target
help:
	@echo "Available targets:"
	@echo "  make test              - Run unit tests"
	@echo "  make test-integration  - Build containers, start services, run integration tests"
	@echo "  make test-all          - Run all tests"
	@echo "  make test-stop         - Stop containers after testing"
	@echo "  make build             - Build and start containers"
	@echo "  make build-force       - Force rebuild and start containers"
	@echo "  make clean             - Stop and remove containers"
	@echo "  make rebuild           - Clean, rebuild, and start containers"
	@echo "  make logs              - Show container logs"
	@echo "  make test-env-up       - Start containers with test mode enabled"
	@echo "  make test-env-down     - Stop test environment"

# Run unit tests
test:
	go test ./... -v -short

# Run integration tests with test mode enabled (avoids rate limiting)
test-integration:
	@echo "Building containers..."
	podman compose build
	@echo "Starting application containers..."
	podman compose up -d
	@echo "Waiting for services to be healthy..."
	@echo "Waiting for database..."
	@until podman exec bookhoard_db pg_isready -U postgres > /dev/null 2>&1; do \
		echo "  Database not ready yet..."; \
		sleep 2; \
	done; \
	echo "  ✓ Database is ready"
	@echo "Waiting for application..."
	@sleep 3; \
	until curl -sf http://localhost:8765/health > /dev/null 2>&1; do \
		echo "  Application not ready yet..."; \
		sleep 2; \
	done; \
	echo "  ✓ Application is ready"
	@echo ""
	@echo "Running integration tests from host against containerized database..."
	DATABASE_HOST=localhost \
	DATABASE_PORT=5432 \
	DATABASE_USER=postgres \
	DATABASE_PASSWORD=$(DBPASS) \
	DATABASE_NAME=bookhoard \
	JWT_SECRET=$(JWT_SECRET) \
	TEST_MODE=true \
	RATE_LIMIT_ENABLED=false \
	TEST_UPLOAD_PATH=./uploads \
	go test ./cmd/server/tests -v -timeout 5m
	@echo ""
	@echo "✅ Integration tests completed!"
	@echo "📝 Containers are still running. Use 'podman compose logs' to view logs or 'podman compose down' to stop."

# Run all tests
test-all: test test-integration

# Build and start containers
build:
	podman compose up --build -d

# Force rebuild without cache
build-force:
	podman compose build --no-cache
	podman compose up -d

# Stop and remove containers
clean:
	podman compose down -v

# Clean rebuild (remove volumes, rebuild, start)
rebuild: clean build

# Show container logs
logs:
	podman compose logs -f

# Start containers with test mode enabled for integration testing
test-env-up:
	@echo "Starting containers with test mode enabled..."
	TEST_MODE=true RATE_LIMIT_ENABLED=false REQUESTS_PER_MINUTE=1000 podman compose up --build -d
	@echo "Waiting for services to be ready..."
	sleep 10
	@echo "Test environment is ready!"

# Stop test environment
test-env-down:
	podman compose down -v

# Stop containers after testing
test-stop:
	@echo "Stopping containers..."
	podman compose down
	@echo "✓ Containers stopped"

# Verify project guidelines compliance
verify-guidelines:
	@echo "Running comprehensive project guidelines verification..."
	@./scripts/verify-guidelines.sh

verify-quick:
	@echo "Running quick project guidelines verification..."
	@./scripts/verify-quick.sh
