using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using LANCommander.Steam.Enums;
using LANCommander.Steam.Events;
using LANCommander.Steam.Models;
namespace LANCommander.Steam.Abstractions;
///
/// Interface for SteamCMD service operations
///
public interface ISteamCmdService
{
///
/// Get or set the SteamCMD executable path
///
string? ExecutablePath { get; set; }
///
/// Get app info (changenumber / buildid and time updated) for the public branch via app_info_print.
/// Requires SteamCMD to be installed and configured. Returns null if SteamCMD is unavailable or the app cannot be queried.
///
Task GetAppInfoAsync(uint appId, System.Threading.CancellationToken cancellationToken = default);
///
/// Event fired when an install job status changes (started, completed, failed)
///
event EventHandler? InstallStatusChanged;
///
/// Event fired when install progress is updated
///
event EventHandler? InstallProgress;
///
/// Check the connection status for a username
///
Task GetConnectionStatusAsync(string username);
///
/// Auto-detect the SteamCMD executable path
///
Task AutoDetectSteamCmdPathAsync();
///
/// Login to Steam with username and optional password
///
Task LoginToSteamAsync(string username, string? password = null);
///
/// Logout from Steam
///
Task LogoutAsync(string username);
///
/// Queue an installation job for Steam content
/// Returns a job ID that can be used to track progress
///
Task InstallContentAsync(uint appId, string installDirectory, string? username = null);
///
/// Remove installed content from a directory
///
Task RemoveContentAsync(string installDirectory);
///
/// Get all profiles (requires profile store to be configured)
///
Task> GetProfilesAsync();
///
/// Get a profile by username (requires profile store to be configured)
///
Task GetProfileAsync(string username);
///
/// Save a profile (requires profile store to be configured)
///
Task SaveProfileAsync(SteamCmdProfile profile);
///
/// Delete a profile by username (requires profile store to be configured)
///
Task DeleteProfileAsync(string username);
}