#nullable enable
using System.Collections.Generic;
using System.Threading.Tasks;
using Discord;
using NadekoBot.Core.Common;
using NadekoBot.Core.Modules.Music;
using NadekoBot.Core.Services.Database.Models;
namespace NadekoBot.Modules.Music.Services
{
public interface IMusicService : IPlaceholderProvider
{
///
/// Leave voice channel in the specified guild if it's connected to one
///
/// Id of the guild
public Task LeaveVoiceChannelAsync(ulong guildId);
///
/// Joins the voice channel with the specified id
///
/// Id of the guild where the voice channel is
/// Id of the voice channel
public Task JoinVoiceChannelAsync(ulong guildId, ulong voiceChannelId);
Task GetOrCreateMusicPlayerAsync(ITextChannel contextChannel);
bool TryGetMusicPlayer(ulong guildId, out IMusicPlayer musicPlayer);
Task EnqueueYoutubePlaylistAsync(IMusicPlayer mp, string playlistId, string queuer);
Task EnqueueDirectoryAsync(IMusicPlayer mp, string dirPath, string queuer);
Task EnqueueSoundcloudPlaylistAsync(IMusicPlayer mp, string playlist, string queuer);
Task SendToOutputAsync(ulong guildId, EmbedBuilder embed);
Task PlayAsync(ulong guildId, ulong voiceChannelId);
Task> SearchVideosAsync(string query);
Task SetMusicChannelAsync(ulong guildId, ulong? channelId);
Task SetRepeatAsync(ulong guildId, PlayerRepeatType repeatType);
Task SetVolumeAsync(ulong guildId, int value);
Task ToggleAutoDisconnectAsync(ulong guildId);
Task GetMusicQualityAsync(ulong guildId);
Task SetMusicQualityAsync(ulong guildId, QualityPreset preset);
}
}