# Environment
NODE_ENV=development

# Server
# 세션 쿠키 HMAC 키 — ≥32자 필수(config-validator M-1). dev/test 전용. ⚠️ 운영은 별도 시크릿으로 교체.
SESSION_SECRET=Zz4VoSzf0sYMEoqASu8G_wx5l3uKi2MlHsxDK3MSkoE
# cluster 워커 프로세스 수(ADR-154) — 정수 N 또는 max(CPU 코어 수). 미설정/1=단일 프로세스.
# MEGA_CLUSTER_WORKERS=max

# ─────────────────────────────────────────────────────────────────────
# Docker 통합 테스트 인프라 제어 (ADR-103) — docker-compose.yml 이 읽음
# 모두 dev/test 전용. ⚠️ 운영 환경 사용 금지.
# 미설정 시 docker-compose.yml 의 인라인 디폴트가 그대로 적용됨.
# 네이밍: MEGA_<SERVICE>_<FIELD> (코드의 MEGA_WSHUB_* 패턴과 정합)
# ─────────────────────────────────────────────────────────────────────
# Postgres (Step 4)
MEGA_PG_PORT=5432
MEGA_PG_USER=mega
MEGA_PG_PASSWORD=dkTkqkfl12
MEGA_PG_DB=mega_test
# MariaDB (Step 4)
MEGA_MARIA_PORT=3306
MEGA_MARIA_ROOT_PASSWORD=dkTkqkfl12
MEGA_MARIA_USER=mega
MEGA_MARIA_PASSWORD=dkTkqkfl12
MEGA_MARIA_DB=mega_test
# MongoDB (Step 5)
MEGA_MONGO_PORT=27017
MEGA_MONGO_USER=mega
MEGA_MONGO_PASSWORD=dkTkqkfl12
MEGA_MONGO_DB=mega_test
# Redis (Step 6)
MEGA_REDIS_PORT=6379
MEGA_REDIS_PASSWORD=dkTkqkfl12
# NATS (Step 6)
MEGA_NATS_PORT=4222
MEGA_NATS_MONITOR_PORT=8222
# 컨테이너 restart 정책: 개발=unless-stopped / CI 일회성=no
MEGA_INFRA_RESTART=unless-stopped

# ─────────────────────────────────────────────────────────────────────
# 연결 문자열 (services config 가 읽음) — 위 docker 디폴트와 정합
# 네이밍: <SERVICE>_URL (prefix 없는 services-키 패턴)
# ─────────────────────────────────────────────────────────────────────
# Database (services.databases.*)
PG_URL=postgres://mega:dkTkqkfl12@localhost:5432/mega_test
MARIA_URL=mariadb://mega:dkTkqkfl12@localhost:3306/mega_test
MONGO_URL=mongodb://mega:dkTkqkfl12@localhost:27017/mega_test?authSource=admin

# Redis (services.caches.*)
REDIS_SESSION_URL=redis://:dkTkqkfl12@localhost:6379/0
REDIS_CACHE_URL=redis://:dkTkqkfl12@localhost:6379/1
REDIS_RATE_URL=redis://:dkTkqkfl12@localhost:6379/2

# NATS (services.buses.*)
NATS_EVENTS_URL=nats://localhost:4222
NATS_JOBS_URL=nats://localhost:4222

# ─────────────────────────────────────────────────────────────────────
# 어댑터 옵션 자동 매핑 (ADR-109, 12-factor) — services.<domain>.<key>.envPrefix 지정 시
#   MegaAdapterManager 가 buildAdapterEnvConfig 로 읽어 어댑터 옵션에 병합(env 우선).
#   grammar: MEGA_<SERVICE>_<KEY>
#     URL                    → url
#     HOST/PORT/USER/PASSWORD → 연결필드 (PORT 만 정수, 나머지 항상 문자열)
#     DATABASE | DB          → database  /  DBNAME → dbName (Mongo)
#     POOL_<X>               → pool.{camelCase(X)}   (driver 무관 공통 풀 인터페이스, 값 자동 타입변환)
#     OPTIONS_<X>            → options.{driver별 키}  (driver-aware, 아래 표 — 값 자동 타입변환)
#   ⚠️ 위 MEGA_<SERVICE>_PORT/USER/PASSWORD/DB 는 docker-compose(ADR-103)와 namespace 공유.
#      grammar 불일치 키(예: MEGA_MARIA_ROOT_PASSWORD)는 어댑터 매핑에서 무시됨.
#   # OPTIONS_* driver별 키 표기 (ADR-109 보강, Step 6 QA H-1 — .env 는 UPPER_SNAKE 로 통일해 적되
#   #  driver 가 인식하는 표기로 자동 변환됨):
#   #    redis/nats/mongodb/mariadb = camelCase  (KEY_PREFIX→keyPrefix, MAX_RECONNECT_ATTEMPTS→maxReconnectAttempts,
#   #                                             SERVER_SELECTION_TIMEOUT_MS→serverSelectionTimeoutMS[MS 보존])
#   #    postgres/sqlite/file       = snake_case (STATEMENT_TIMEOUT→statement_timeout)
# ─────────────────────────────────────────────────────────────────────
# 공통 풀 인터페이스 (드라이버 키로 자동 매핑 — 단위: idleTimeoutMs/acquireTimeoutMs/maxLifetimeMs=ms)
#   MEGA_PG_POOL_MIN=0
#   MEGA_PG_POOL_MAX=10
#   MEGA_PG_POOL_IDLE_TIMEOUT_MS=10000
#   MEGA_PG_POOL_ACQUIRE_TIMEOUT_MS=0
#   MEGA_PG_POOL_MAX_LIFETIME_MS=0            # pg 전용 (maria/mongo 미지원→throw)
# 드라이버 특화 옵션 (passthrough — driver별 키 변환)
#   MEGA_PG_OPTIONS_SSL=true                  # → options.ssl (pg=snake_case)
#   MEGA_PG_OPTIONS_STATEMENT_TIMEOUT=30000   # → options.statement_timeout
#   MEGA_MARIA_OPTIONS_BIG_INT_STRATEGY=number  # → options.bigIntStrategy (maria=camel) 'number'(디폴트,2^53 초과 정밀도 손실)|'bigint'|'string'
#   MEGA_MARIA_OPTIONS_CHARSET=utf8mb4        # → options.charset
#   MEGA_MARIA_OPTIONS_MULTIPLE_STATEMENTS=false  # → options.multipleStatements (camel 변환)
#   MEGA_MONGO_DBNAME=mega_test               # Mongo dbName (url path 로도 가능)
#   MEGA_MONGO_OPTIONS_AUTH_SOURCE=admin      # → options.authSource (mongo=camel)
#   MEGA_MONGO_OPTIONS_SERVER_SELECTION_TIMEOUT_MS=5000  # → options.serverSelectionTimeoutMS (MS 대문자 보존, 이제 env 로 가능)

# WS Hub (mega ws-hub CLI — src/cli/ws-hub.js, runWsHubCli)
# 코드가 읽는 키는 MEGA_WSHUB_* (언더스코어 없는 단일 service 토큰). TOKENS 만 필수.
# 비밀 토큰은 운영에서 교체. hub 는 `mega ws-hub` 실행 시에만 기동(자동 기동 없음).
MEGA_WSHUB_TOKENS=change-me
MEGA_WSHUB_PORT=3100
MEGA_WSHUB_HOST=0.0.0.0
MEGA_WSHUB_HEARTBEAT_MS=25000
MEGA_WSHUB_MAX_PAYLOAD=1048576
# 압축(ADR-078) — 'true' 일 때만 ON. THRESHOLD 는 압축 ON 시에만 적용(byte).
MEGA_WSHUB_COMPRESSION=false
MEGA_WSHUB_COMPRESSION_THRESHOLD=1024

# Telegram (옵션 — 로거 sink)
# TG_BOT_TOKEN=   ← 실토큰은 .env.local 에. npm publish 노출 방지로 .env 에선 비움(2026-06-08).
# TG_CHAT_ID=

# OpenTelemetry 분산 트레이싱 (옵션 — Phase 3 Step 8 / Phase 5 Step 1, MegaTracing)
#   MegaTracing.fromEnv() 가 읽는 런타임 키(ADR-114/126). 옵트인 OFF(디폴트)면 0 비용.
#   ⚠️ 구 OTEL_ENABLED/OTEL_ENDPOINT(prefix 없는)는 코드가 안 읽는 죽은 키라 제거 — 반드시 MEGA_OTEL_*.
MEGA_OTEL_ENABLED=false
MEGA_OTEL_SERVICE_NAME=mega-app
MEGA_OTEL_ENDPOINT=http://localhost:4318/v1/traces
MEGA_OTEL_EXPORTER=otlp
MEGA_OTEL_SAMPLING_RATIO=1.0
MEGA_OTEL_VERSION=
MEGA_OTEL_ENVIRONMENT=

# ── 실 OTel collector + Zipkin docker 백엔드 (ADR-128) — 통합 테스트(tracing E2E)가 읽음 ──
# docker-compose 의 otel-collector(:4318 OTLP HTTP)·zipkin(:9411) 가동 시 실 OTLP→collector→zipkin 검증.
# 미설정 시 tracing E2E(otel-collector-e2e)만 자동 skip(CI 일관성). OTLP HTTP traces path 는 /v1/traces.
MEGA_OTEL_OTLP_ENDPOINT=http://localhost:4318/v1/traces
MEGA_OTEL_ZIPKIN_API=http://localhost:9411/api/v2
MEGA_OTEL_HEALTH_URL=http://localhost:13133

# Log level
LOG_LEVEL=info
