using PSLauncher.Models;

namespace PSLauncher.Core.Installations;

public interface IInstallationRegistry
{
    IReadOnlyList<InstalledVersion> Scan();
    InstalledVersion? Get(string version);
    bool IsInstalled(string version);
    Task DeleteAsync(string version, IProgress<double>? progress, CancellationToken ct);

    /// <summary>
    /// Écrit le metadata <c>.proserve-meta.json</c> dans le dossier d'install avec
    /// le nom du .exe à lancer (récupéré du manifest serveur). À appeler par
    /// <c>MainViewModel</c> après l'extraction du ZIP, pour que le futur <c>Scan</c>
    /// trouve le bon exe sans avoir besoin du manifest en mémoire.
    /// </summary>
    Task WriteInstallMetadataAsync(string installDir, string executableName, CancellationToken ct);

    /// <summary>Marque les redists comme installés (timestamp UTC) dans la metadata.</summary>
    Task MarkRedistInstalledAsync(string installDir, CancellationToken ct);

    /// <summary>Vrai si la metadata indique que les redists ont déjà été installés.</summary>
    bool IsRedistInstalled(string installDir);
}
