package com.devjob.application.client;

import com.devjob.application.dto.EmailRequest;
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 알림 호출을 서킷브레이커로 감싼 래퍼(JobClient와 같은 패턴).
 * 알림 서비스가 죽으면 회로가 열려 즉시 fallback으로 빠진다. 알림은 부가 기능이라
 * fallback은 예외를 던지지 않고 로그만 남긴다 — 지원 자체는 영향받지 않는다.
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class NotificationClient {

    private final NotificationHttpClient notificationHttpClient;

    @CircuitBreaker(name = "devjob-notification", fallbackMethod = "sendEmailFallback")
    public void sendEmail(EmailRequest request) {
        notificationHttpClient.sendEmail(request);
    }

    // 알림은 부가 기능 — 회로 OPEN/장애 시 예외를 던지지 않고 로그만(지원은 유지)
    public void sendEmailFallback(EmailRequest request, Throwable t) {
        log.warn("[Notification] 알림 서비스 불가 — 알림을 생략합니다(지원은 유지). 원인: {}", t.getMessage());
    }
}
