# Baron SSO용 Docker Compose 헬퍼

# 환경 변수 로드
ifneq (,$(wildcard ./.env))
    include .env
    export
endif

# Compose 파일 경로
COMPOSE_INFRA := compose.infra.yaml
COMPOSE_ORY := compose.ory.yaml
COMPOSE_APP := docker-compose.yaml

# --- 기본 실행 ---
# 주의: --remove-orphan 사용 금지 (다른 스택이 orphan으로 판단되어 종료될 수 있음)
up-all:
	@echo "Starting ALL stacks (infra + ory + app)..."
	docker compose -f $(COMPOSE_INFRA) -f $(COMPOSE_ORY) -f $(COMPOSE_APP) up -d

# --- 개별 스택 실행 ---
up-infra:
	@echo "Starting Infra stack (postgres/clickhouse/redis)..."
	docker compose -f $(COMPOSE_INFRA) up -d

up-ory:
	@echo "Starting Ory stack (kratos/hydra/keto/oathkeeper)..."
	docker compose -f $(COMPOSE_ORY) up -d

up-app:
	@echo "Starting App stack (backend/userfront/adminfront/devfront)..."
	docker compose -f $(COMPOSE_APP) up -d

up-backend:
	@echo "Starting Backend only..."
	docker compose -f $(COMPOSE_APP) up -d backend

up-dev: up-infra up-ory
	@echo "Dev stack is up (infra + ory)."

up-front-dev: up-infra up-ory up-backend
	@echo "Dev stack is up (infra + ory + backend)."

# --- 종료 (Down) ---
down-all:
	@echo "Stopping ALL stacks (infra + ory + app)..."
	docker compose -f $(COMPOSE_INFRA) -f $(COMPOSE_ORY) -f $(COMPOSE_APP) down

down-app:
	@echo "Stopping App stack..."
	docker compose -f $(COMPOSE_APP) down

down-backend:
	@echo "Stopping Backend only..."
	docker compose -f $(COMPOSE_APP) stop backend

down-infra:
	@echo "Stopping Infra stack..."
	docker compose -f $(COMPOSE_INFRA) down

down-ory:
	@echo "Stopping Ory stack..."
	docker compose -f $(COMPOSE_ORY) down

# --- 유틸리티 ---
# 인프라 상태 확인
check-infra:
	@echo "Checking infra status..."
	@if [ "$$(docker inspect -f '{{.State.Health.Status}}' baron_postgres 2>/dev/null)" != "healthy" ]; then \
			echo "Error: PostgreSQL is not running or not healthy."; \
			echo "Please run 'make up-infra' first."; \
			exit 1; \
	else \
			echo "PostgreSQL is healthy."; \
	fi

ps:
	docker compose -f $(COMPOSE_INFRA) -f $(COMPOSE_ORY) -f $(COMPOSE_APP) ps

logs-infra:
	docker compose -f $(COMPOSE_INFRA) logs -f

logs-ory:
	docker compose -f $(COMPOSE_ORY) logs -f

logs-app:
	docker compose -f $(COMPOSE_APP) logs -f
