import { toast } from "sonner";

/**
 * 글로벌 Alert 유틸리티
 * toast를 alert 형식으로 쉽게 사용할 수 있는 인터페이스 제공
 */
class AlertService {
  /**
   * 성공 메시지
   */
  success(message: string, description?: string) {
    if (description) {
      toast.success(message, {
        description,
      });
    } else {
      toast.success(message);
    }
  }

  /**
   * 에러 메시지
   */
  error(message: string, description?: string) {
    if (description) {
      toast.error(message, {
        description,
      });
    } else {
      toast.error(message);
    }
  }

  /**
   * 정보 메시지
   */
  info(message: string, description?: string) {
    if (description) {
      toast.info(message, {
        description,
      });
    } else {
      toast.info(message);
    }
  }

  /**
   * 경고 메시지
   */
  warning(message: string, description?: string) {
    if (description) {
      toast.warning(message, {
        description,
      });
    } else {
      toast.warning(message);
    }
  }

  /**
   * 로딩 메시지
   */
  loading(message: string, description?: string) {
    if (description) {
      return toast.loading(message, {
        description,
      });
    } else {
      return toast.loading(message);
    }
  }

  /**
   * Promise 기반 알림
   * 로딩 -> 성공/실패로 자동 전환
   */
  promise<T>(
    promise: Promise<T>,
    messages: {
      loading: string;
      success: string | ((data: T) => string);
      error: string | ((error: Error) => string);
    }
  ) {
    return toast.promise(promise, messages);
  }

  /**
   * 커스텀 메시지
   */
  custom(message: string) {
    toast(message);
  }

  /**
   * 특정 toast 제거
   */
  dismiss(toastId?: string | number) {
    toast.dismiss(toastId);
  }
}

// 싱글톤 인스턴스 생성
const Alert = new AlertService();

// 글로벌 window 객체에 등록 (선택적)
if (typeof window !== 'undefined') {
  (window as any).Alert = Alert;
}

export default Alert;
