using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Jellyfin.Plugin.JellyLMS.Models;
namespace Jellyfin.Plugin.JellyLMS.Services;
///
/// Interface for LMS JSON-RPC API communication.
///
public interface ILmsApiClient
{
///
/// Tests the connection to the LMS server.
///
/// Server status with connection result.
Task TestConnectionAsync();
///
/// Gets all players connected to LMS.
///
/// List of LMS players.
Task> GetPlayersAsync();
///
/// Gets the status of a specific player.
///
/// The player's MAC address.
/// The player status.
Task GetPlayerStatusAsync(string playerMac);
///
/// Plays a URL on the specified player.
///
/// The player's MAC address.
/// The audio URL to play.
/// Optional title for display.
/// True if successful.
Task PlayUrlAsync(string playerMac, string url, string? title = null);
///
/// Pauses playback on the specified player.
///
/// The player's MAC address.
/// True if successful.
Task PauseAsync(string playerMac);
///
/// Resumes playback on the specified player.
///
/// The player's MAC address.
/// True if successful.
Task PlayAsync(string playerMac);
///
/// Stops playback on the specified player.
///
/// The player's MAC address.
/// True if successful.
Task StopAsync(string playerMac);
///
/// Sets the volume on the specified player.
///
/// The player's MAC address.
/// Volume level (0-100).
/// True if successful.
Task SetVolumeAsync(string playerMac, int volume);
///
/// Seeks to a position on the specified player.
///
/// The player's MAC address.
/// Position in seconds.
/// True if successful.
Task SeekAsync(string playerMac, double positionSeconds);
///
/// Powers on the specified player.
///
/// The player's MAC address.
/// True if successful.
Task PowerOnAsync(string playerMac);
///
/// Powers off the specified player.
///
/// The player's MAC address.
/// True if successful.
Task PowerOffAsync(string playerMac);
///
/// Syncs a slave player to a master player.
///
/// The master player's MAC address.
/// The slave player's MAC address.
/// True if successful.
Task SyncPlayerAsync(string masterMac, string slaveMac);
///
/// Removes a player from its sync group.
///
/// The player's MAC address.
/// True if successful.
Task UnsyncPlayerAsync(string playerMac);
///
/// Gets all current sync groups.
///
/// List of sync groups.
Task> GetSyncGroupsAsync();
}