package com.kt.event.participation.infrastructure.kafka;

import com.kt.event.participation.infrastructure.kafka.event.ParticipantRegisteredEvent;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;

/**
 * Kafka Producer 서비스
 *
 * @author Digital Garage Team
 * @since 2025-01-24
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class KafkaProducerService {

    private static final String PARTICIPANT_REGISTERED_TOPIC = "participant-registered-events";

    private final KafkaTemplate<String, Object> kafkaTemplate;

    /**
     * 참여자 등록 이벤트 발행
     *
     * @param event 참여자 등록 이벤트
     */
    public void publishParticipantRegistered(ParticipantRegisteredEvent event) {
        try {
            kafkaTemplate.send(PARTICIPANT_REGISTERED_TOPIC, event.getEventId(), event);
            log.info("Kafka 이벤트 발행 성공 - topic: {}, participantId: {}",
                PARTICIPANT_REGISTERED_TOPIC, event.getParticipantId());
        } catch (Exception e) {
            log.error("Kafka 이벤트 발행 실패 - participantId: {}", event.getParticipantId(), e);
            // 이벤트 발행 실패는 서비스 로직에 영향을 주지 않음
        }
    }
}
