package com.zioinfo.signage.rag;

import lombok.Getter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 중앙 guardia-rag 연동 설정 (ESN 전용).
 *
 * <p><b>보안 불변</b>: {@code base-url} 은 <b>온프레미스(중앙 guardia-rag) 전용</b>이다.
 * 외부 엔드포인트를 가리키도록 설정해서는 안 된다 — 기본값은 서버 내부 루프백
 * {@code http://127.0.0.1:8020}.
 *
 * <p>{@code @Value} 주입 방식(OllamaClient 패턴 일치) — {@code @EnableConfigurationProperties}
 * 등록 불필요. application.yml:
 * <pre>
 * guardia:
 *   rag:
 *     base-url: http://127.0.0.1:8020
 *     timeout-ms: 120000
 *     enabled: true
 *     solution: esn
 *     max-concurrent-streams: 2
 * </pre>
 */
@Component
@Getter
public class RagProperties {

    /** 중앙 guardia-rag 베이스 URL (서버 내부 루프백 기본). */
    @Value("${guardia.rag.base-url:http://127.0.0.1:8020}")
    private String baseUrl;

    /** 호출 타임아웃(ms). 소형모델 생성 콜드로드 고려 120s 기본. */
    @Value("${guardia.rag.timeout-ms:120000}")
    private long timeoutMs;

    /** RAG 경유 마스터 스위치. false면 RagClient 가 항상 미가용으로 동작(ESN 로컬 폴백). */
    @Value("${guardia.rag.enabled:true}")
    private boolean enabled;

    /** 솔루션 식별자(컬렉션·토글·피드백 격리 키). */
    @Value("${guardia.rag.solution:signage}")
    private String solution;

    /** 동시 SSE 스트림 상한 — 서버 RAM 보호. */
    @Value("${guardia.rag.max-concurrent-streams:2}")
    private int maxConcurrentStreams;
}
