.PHONY: dev dev-up dev-down test migrate migrate-up migrate-down build clean

# Development
dev: dev-up
	@echo "Development environment is running"
	@echo "Backend: http://localhost:8080"
	@echo "Frontend: http://localhost:3000"
	@echo ""
	@echo "To view logs:"
	@echo "  make dev-logs"
	@echo ""
	@echo "To stop:"
	@echo "  make dev-down"

dev-up:
	@echo "Creating podman network..."
	-podman network create paragliding-net 2>/dev/null || true
	@echo "Starting PostgreSQL..."
	-podman rm -f paragliding-postgres 2>/dev/null || true
	podman run -d \
		--name paragliding-postgres \
		--network paragliding-net \
		-e POSTGRES_DB=paragliding \
		-e POSTGRES_USER=dev \
		-e POSTGRES_PASSWORD=devpass \
		-p 5432:5432 \
		postgres:16-alpine
	@echo "Waiting for PostgreSQL to be ready..."
	@sleep 5
	@echo "Building backend..."
	podman build -t paragliding-backend:dev -f backend/Dockerfile.dev backend/
	@echo "Starting backend..."
	-podman rm -f paragliding-backend 2>/dev/null || true
	podman run -d \
		--name paragliding-backend \
		--network paragliding-net \
		-e DATABASE_URL="postgres://dev:devpass@paragliding-postgres:5432/paragliding?sslmode=disable" \
		-e PORT=8080 \
		-e LOCATION_LAT=32.8893 \
		-e LOCATION_LON=-117.2519 \
		-e LOCATION_NAME="Torrey Pines Gliderport" \
		-e TIMEZONE="America/Los_Angeles" \
		-e FETCH_INTERVAL=15m \
		-e CACHE_TTL=10m \
		-p 8080:8080 \
		-v $(PWD)/backend:/app:z \
		paragliding-backend:dev
	@echo "Building frontend..."
	podman build -t paragliding-frontend:dev --target dev -f frontend/Dockerfile frontend/
	@echo "Starting frontend..."
	-podman rm -f paragliding-frontend 2>/dev/null || true
	podman run -d \
		--name paragliding-frontend \
		--network paragliding-net \
		-e NEXT_PUBLIC_API_URL=http://localhost:8080/api/v1 \
		-p 3000:3000 \
		-v $(PWD)/frontend:/app:z \
		-v /app/node_modules \
		-v /app/.next \
		paragliding-frontend:dev

dev-down:
	@echo "Stopping containers..."
	-podman rm -f paragliding-frontend paragliding-backend paragliding-postgres 2>/dev/null || true
	@echo "Containers stopped"

dev-logs:
	@echo "=== Backend Logs ==="
	podman logs -f paragliding-backend

dev-logs-frontend:
	@echo "=== Frontend Logs ==="
	podman logs -f paragliding-frontend

dev-logs-postgres:
	@echo "=== PostgreSQL Logs ==="
	podman logs -f paragliding-postgres

# Database migrations
migrate-up:
	cd backend && go run -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest \
		-path ./migrations \
		-database "$(DATABASE_URL)" \
		up

migrate-down:
	cd backend && go run -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest \
		-path ./migrations \
		-database "$(DATABASE_URL)" \
		down 1

migrate-create:
	cd backend && go run -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest \
		create -ext sql -dir ./migrations -seq $(name)

# Testing
test:
	docker compose -f docker-compose.test.yml up --build --abort-on-container-exit
	docker compose -f docker-compose.test.yml down -v

test-backend:
	cd backend && go test -v ./...

test-frontend:
	cd frontend && npm test

# Build
build-backend:
	cd backend && go build -o bin/api ./cmd/api

build-frontend:
	cd frontend && npm run build

build: build-backend build-frontend

# Clean
clean:
	rm -rf backend/bin
	rm -rf frontend/.next
	rm -rf frontend/node_modules

# Local development without Docker
# Start postgres only (for local dev)
dev-db:
	@echo "Starting PostgreSQL..."
	podman-compose -f docker-compose.dev.yml up -d
	@echo "PostgreSQL is running on localhost:5432"
	@echo "Database: paragliding"
	@echo "User: dev"
	@echo "Password: devpass"

dev-db-down:
	@echo "Stopping PostgreSQL..."
	podman-compose -f docker-compose.dev.yml down
	@echo "PostgreSQL stopped"

# Run backend locally (requires postgres)
run-backend:
	@if [ ! -f backend/.env ]; then \
		echo "Creating backend/.env from .env.example..."; \
		cp backend/.env.example backend/.env; \
	fi
	cd backend && go run ./cmd/api

# Run frontend locally
run-frontend:
	cd frontend && npm run dev

# Complete local development setup (using idempotent script)
dev-local:
	@./dev.sh

# Alternative: step-by-step setup
dev-local-manual:
	@echo "🚀 Setting up local development environment..."
	@echo ""
	@echo "1. Starting PostgreSQL..."
	@make dev-db
	@echo ""
	@echo "2. Waiting for PostgreSQL to be ready..."
	@sleep 3
	@echo ""
	@echo "3. Running migrations..."
	@make migrate-up DATABASE_URL="postgres://dev:devpass@localhost:5432/paragliding?sslmode=disable"
	@echo ""
	@echo "✅ Setup complete!"
	@echo ""
	@echo "Now run these commands in separate terminals:"
	@echo "  Terminal 1: make run-backend"
	@echo "  Terminal 2: make run-frontend"
