using PSLauncher.Models;

namespace PSLauncher.Core.Downloads;

public interface IDownloadManager
{
    Task<string> DownloadAsync(
        DownloadJob job,
        IProgress<DownloadProgress>? progress,
        CancellationToken ct);

    /// <summary>Retourne l'état de DL persistant pour cette version, ou null s'il n'y en a pas.</summary>
    DownloadState? GetResumableState(string version);

    /// <summary>Supprime l'état persistant et le fichier partiel associé.</summary>
    void DiscardResumableState(string version);
}

public sealed record DownloadJob(
    string Version,
    Uri Url,
    long ExpectedSize,
    string ExpectedSha256);
