.PHONY: build test lint clean docker-build up down fmt vet

# ──────────────────────────────────────────────
# Build
# ──────────────────────────────────────────────

build:
	@echo ">> Building all services..."
	cd services/cart && go build -o ../../bin/cart-service ./cmd/server
	cd services/payment && go build -o ../../bin/payment-service ./cmd/server
	cd services/license && go build -o ../../bin/license-service ./cmd/server
	@echo ">> Done. Binaries in ./bin/"

# ──────────────────────────────────────────────
# Test & Lint
# ──────────────────────────────────────────────

test:
	@echo ">> Running tests..."
	cd pkg && go test ./... -v -race -count=1
	cd services/cart && go test ./... -v -race -count=1
	cd services/payment && go test ./... -v -race -count=1
	cd services/license && go test ./... -v -race -count=1

vet:
	@echo ">> Running go vet..."
	cd pkg && go vet ./...
	cd services/cart && go vet ./...
	cd services/payment && go vet ./...
	cd services/license && go vet ./...

lint:
	@echo ">> Running golangci-lint..."
	cd pkg && golangci-lint run ./...
	cd services/cart && golangci-lint run ./...
	cd services/payment && golangci-lint run ./...
	cd services/license && golangci-lint run ./...

fmt:
	@echo ">> Formatting code..."
	gofmt -s -w .

# ──────────────────────────────────────────────
# Docker
# ──────────────────────────────────────────────

docker-build:
	@echo ">> Building Docker images..."
	docker compose build

up:
	@echo ">> Starting all services..."
	docker compose up -d

down:
	@echo ">> Stopping all services..."
	docker compose down

logs:
	docker compose logs -f

# ──────────────────────────────────────────────
# Cleanup
# ──────────────────────────────────────────────

clean:
	@echo ">> Cleaning build artifacts..."
	rm -rf bin/
	docker compose down -v --rmi local 2>/dev/null || true
