package com.goldenchart.websocket;

import com.goldenchart.dto.CandleBarDto;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Service;

/**
 * STOMP 실시간 캔들 분배기 (명세서 3.5 / 5.2).
 *
 * BarBuilder 또는 LiveStrategyScheduler 에서 확정된 캔들 데이터를
 * 구독자에게 브로드캐스트한다.
 *
 * 토픽: /sub/charts/{market}/{candleType}
 * 페이로드: CandleBarDto (JSON 직렬화)
 */
@Service
@RequiredArgsConstructor
@Slf4j
public class TradingWebSocketBroker {

    private final SimpMessagingTemplate messagingTemplate;

    /**
     * 특정 마켓·캔들타입 구독자에게 실시간 캔들 업데이트를 발행한다.
     *
     * @param market     업비트 마켓 코드 (e.g. "KRW-BTC")
     * @param candleType 캔들 타입 (e.g. "1m")
     * @param bar        전송할 캔들 데이터
     */
    public void publish(String market, String candleType, CandleBarDto bar) {
        String destination = "/sub/charts/" + market + "/" + candleType;
        try {
            messagingTemplate.convertAndSend(destination, bar);
            if (log.isDebugEnabled()) {
                log.debug("[TradingWebSocketBroker] publish → {} close={}", destination, bar.getClose());
            }
        } catch (Exception e) {
            log.warn("[TradingWebSocketBroker] 발행 실패 {}: {}", destination, e.getMessage());
        }
    }
}
