namespace Application.Abstractions.YouTube;

/// <summary>
/// YouTube 라이브 채팅 수집 서비스
/// PubSubHubbub 알림 → videos.list 확인 → streamList/폴링으로 채팅 수집
/// </summary>
public interface IYouTubeLiveChatService
{
    /// <summary>특정 videoId의 라이브 채팅 모니터링 시작</summary>
    Task<bool> StartAsync(string videoId, CancellationToken ct);

    /// <summary>라이브 채팅 모니터링 중지</summary>
    Task StopAsync(string liveChatId);

    /// <summary>현재 모니터링 중인지 확인</summary>
    bool IsMonitoring(string liveChatId);

    /// <summary>모니터링 중인 모든 liveChatId 목록</summary>
    IReadOnlyList<string> GetActiveChatIds();

    /// <summary>새 메시지 수신 이벤트 — ChatHub에서 구독하여 브로드캐스트</summary>
    event Func<YouTubeChatMessage, Task>? OnMessageReceived;
}