using ErrorOr; namespace Musify.Application.Contracts { public record YouTubeSongResult( string VideoId, string Title, string Artist, string Album, int DurationSeconds, string ThumbnailUrl, bool IsExplicit); public record YouTubeSearchResult( IReadOnlyList Items, string ContinuationToken); public record YouTubeStreamInfo(string Url, int ExpiresInSeconds); public interface IYouTubeMusicService { Task> SearchSongsAsync(string query, string continuationToken, CancellationToken cancellationToken); Task> GetAudioStreamAsync(string videoId, CancellationToken cancellationToken); Task> GetSongAsync(string videoId, CancellationToken cancellationToken); } }