namespace Application.Abstractions.YouTube;

/// <summary>
/// YouTube Data API v3 — 채널 정보, 구독/멤버십 확인
/// </summary>
public interface IYouTubeApiService
{
    // ── 공개 정보 (API Key 사용) ──────────────────────────────────────

    /// <summary>채널 ID로 채널 정보 조회</summary>
    Task<YouTubeChannelInfo?> GetChannelByIdAsync(string channelId, CancellationToken ct);

    /// <summary>여러 채널 ID를 한 번에 조회 (최대 50개, 1 unit)</summary>
    Task<IReadOnlyList<YouTubeChannelInfo>> GetChannelsByIdsAsync(IReadOnlyList<string> channelIds, CancellationToken ct);

    /// <summary>핸들(@username)로 채널 정보 조회</summary>
    Task<YouTubeChannelInfo?> GetChannelByHandleAsync(string handle, CancellationToken ct);

    /// <summary>videoId로 라이브 스트림 정보 조회 (liveBroadcastContent, activeLiveChatId)</summary>
    Task<YouTubeLiveStreamInfo?> GetLiveStreamInfoAsync(string videoId, CancellationToken ct);

    // ── 사용자별 (OAuth Access Token 필요) ────────────────────────────

    /// <summary>현재 사용자가 특정 채널을 구독 중인지 확인</summary>
    Task<bool> IsSubscribedAsync(string accessToken, string channelId, CancellationToken ct);

    /// <summary>현재 사용자의 특정 채널 멤버십 상태 확인</summary>
    Task<YouTubeMembershipStatus> CheckMembershipAsync(string accessToken, string channelId, CancellationToken ct);

    /// <summary>OAuth Access Token으로 인증된 사용자 본인의 채널 조회 (mine=true)</summary>
    Task<YouTubeChannelInfo?> GetMyChannelAsync(string accessToken, CancellationToken ct);
}