server:
  port: 8012

spring:
  application:
    name: guardia-cms
  datasource:
    url: ${DB_URL:jdbc:postgresql://localhost:5432/cms_db}
    username: ${DB_USER:cms_user}
    password: ${DB_PASS:cms_pass2026}
    driver-class-name: org.postgresql.Driver
    hikari:
      # 공유 PostgreSQL max_connections 포화 방지(형제 솔루션 다수 동거) — 풀 캡 3.
      maximum-pool-size: ${DB_POOL_MAX:3}
  sql:
    init:
      # UIWS 이식: 91_uiws_port.sql(신규 tb_uiws_* + cms_user 2FA ALTER, 전부 멱등)만 부팅 시 적용.
      # 기존 schema.sql 은 deploy_server 가 psql 로 별도 적용(비멱등 cms_setting/cms_i18n 시드 충돌 회피).
      # 91_uiws_port.sql 단독은 완전 멱등 → mode:always 안전. continue-on-error 로 부분 실패 격리.
      mode: ${SQL_INIT_MODE:always}
      # 91=업무모듈+2FA 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/cms/docs
  swagger-ui:
    path: /api/cms/swagger

guardia:
  itsm-url: ${ITSM_URL:http://localhost:9001}
  mall-url: ${MALL_URL:http://localhost:8011}
  crm-url: ${CRM_URL:http://localhost:8004}
  ocr-url: ${OCR_URL:http://localhost:8005}
  bi-url: ${BI_URL:http://localhost:8006}
  # 보안 불변 규칙: Ollama 온프레미스만 허용. 외부 AI API 절대 금지.
  ollama-url: ${OLLAMA_URL:http://localhost:11434}
  ollama-text-model: ${OLLAMA_TEXT_MODEL:llama3.2:1b}
  ollama-vision-model: ${OLLAMA_VISION_MODEL:moondream}
  # 로컬 임베디드 DuckDB — AI 피드백/추론 학습 저장소(솔루션별 격리). 서버 기본 경로.
  duckdb:
    path: ${CMS_DUCKDB_PATH:/opt/guardia-cms/data/cms_learning.duckdb}
  # 중앙 guardia-rag 연동 (최신 AI 기법 배선 — 별개 레이어, 미가용 시 CMS 로컬 폴백).
  # 보안 불변: 온프레미스(서버 내부 루프백) 전용. 외부 엔드포인트 지정 금지.
  rag:
    base-url: ${RAG_URL:http://127.0.0.1:8020}
    timeout-ms: ${RAG_TIMEOUT_MS:120000}
    enabled: ${RAG_ENABLED:true}
    solution: cms
  crypto:
    secret: ${CMS_CRYPTO_SECRET:guardia-cms-aes-256-gcm-master-key-2026-zioinfo}
  jwt:
    secret: ${JWT_SECRET:guardia-cms-jwt-secret-2026-minimum-256bit-key-zioinfo}
    expiration: 86400000

# UIWS 이식 모듈 설정 (com.zioinfo.cms.uiws.config.UiwsProperties = prefix cms.uiws)
cms:
  uiws:
    auth:
      # 2FA 레이어 on/off. 기본 on. off 면 기존 단일 JWT 로그인 흐름 유지(회귀 0).
      twofa-enabled: ${CMS_TWOFA_ENABLED:true}
      verify-token-validity-seconds: 300   # 1차 통과 후 verify-token 5분
      email-code-validity-seconds: 300     # 이메일 인증코드 5분
      max-login-fail: 5                    # 실패 5회 시 계정 잠금
    upload:
      upload-dir: ${CMS_UIWS_UPLOAD_DIR:./uploads/uiws}
    mail:
      # 메일 발송 모드. log=LogMailSender 폴백(외부 호출 0, 코드는 로그에만). smtp 운영 시 별도 빈.
      mode: ${CMS_MAIL_MODE:log}

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