server:
  port: 8013

spring:
  application:
    name: guardia-mes
  datasource:
    url: ${DB_URL:jdbc:postgresql://localhost:5432/mes_db}
    username: ${DB_USER:mes_user}
    password: ${DB_PASS:mes_pass2026}
    driver-class-name: org.postgresql.Driver
    hikari:
      # 운영 함정 준수: 다중 솔루션 동시 기동 시 PG max_connections 보호 — 풀 3개 캡.
      maximum-pool-size: ${DB_POOL_MAX:3}
      minimum-idle: 1
  sql:
    init:
      # UIWS 이식: 91_uiws_port.sql(tb_uiws_* + mes_user 2FA ALTER, 전부 멱등)만 부팅 시 적용.
      # 기존 schema.sql 은 deploy_server 가 psql 로 별도 적용(비멱등 시드 충돌 회피).
      mode: ${SQL_INIT_MODE:always}
      # 91=업무/2FA(tb_uiws_* + mes_user ALTER), 92=권한관리 system, 104=AI 플랫폼 설정 시드(멱등). 전부 멱등.
      schema-locations: classpath:db/91_uiws_port.sql,classpath:db/92_uiws_system.sql,classpath:db/104_seed_ai_config.sql
      continue-on-error: true
  servlet:
    multipart:
      max-file-size: 20MB
      max-request-size: 20MB

mybatis:
  mapper-locations: classpath:mapper/**/*.xml
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl

springdoc:
  api-docs:
    path: /api/mes/docs
  swagger-ui:
    path: /api/mes/swagger

# ── UIWS 이식 모듈 설정 (worklog/schedule/message/stats + 2FA 레이어) ──────────
mes:
  uiws:
    auth:
      twofa-enabled: ${UIWS_2FA:true}            # off=기존 단일로그인 회귀 0
      verify-token-validity-seconds: 300         # 1차 통과 후 verify-token 5분
      email-code-validity-seconds: 300           # 이메일 인증코드 5분
      max-login-fail: 5                          # 실패 5회 누적 시 계정 잠금
    mail:
      mode: ${UIWS_MAIL_MODE:log}                # LogMailSender 폴백(외부 API 0). 운영 smtp 시 별도 빈
    upload:
      upload-dir: ${UIWS_UPLOAD_DIR:./uploads/uiws}
  # ── AI 로컬 학습 저장소(임베디드 DuckDB) — 피드백/추론 로그. 미가용 시 조용히 비활성(AI 기능 무영향) ──
  ai:
    duckdb-path: ${MES_DUCKDB_PATH:/opt/guardia-mes/data/mes_learning.duckdb}

guardia:
  erp-url: ${ERP_URL:http://localhost:8003}
  itsm-url: ${ITSM_URL:http://localhost:9001}
  ocr-url: ${OCR_URL:http://localhost:8005}
  bi-url: ${BI_URL:http://localhost:8006}
  # 중앙 guardia-rag (최신 AI 기법: 하이브리드/그래프/리랭크 검색·에이전틱 tool-use·구조화·스트리밍)
  # 보안 불변: 온프레미스 루프백 전용. 미가용/타임아웃 시 MES 결정론 로컬 폴백(degraded:true).
  rag:
    base-url: ${RAG_URL:http://127.0.0.1:8020}
    timeout-ms: ${RAG_TIMEOUT_MS:120000}
    enabled: ${RAG_ENABLED:true}
    solution: mes
  # 보안 불변 규칙: Ollama 온프레미스만 허용. 외부 AI API 절대 금지.
  #   (예외: Claude 는 소유자 승인으로 api.anthropic.com 단일 경로 허용 — 키는 ANTHROPIC_API_KEY env 로만 주입)
  ollama-url: ${OLLAMA_URL:http://localhost:11434}
  ollama-text-model: ${OLLAMA_TEXT_MODEL:llama3.2:1b}
  ollama-vision-model: ${OLLAMA_VISION_MODEL:moondream}
  crypto:
    secret: ${MES_CRYPTO_SECRET:guardia-mes-aes-256-gcm-master-key-2026-zioinfo}
  jwt:
    secret: ${JWT_SECRET:guardia-mes-jwt-secret-2026-minimum-256bit-key-zioinfo}
    expiration: 86400000

logging:
  level:
    com.zioinfo.mes: DEBUG
    org.mybatis: WARN
