using PSLauncher.Models;

namespace PSLauncher.Core.Licensing;

public interface ILicenseService
{
    Task<LicenseValidationResponse> ValidateAsync(string licenseKey, CancellationToken ct);
    LicenseValidationResponse? GetCached();
    void SaveCached(string licenseKey, LicenseValidationResponse response);
    void Clear();
    bool HasLicense();
    string GetMachineId();
    bool CanDownloadVersion(LicenseValidationResponse? license, VersionManifest version);

    /// <summary>
    /// Demande au serveur une URL HMAC-signée valide 1 h pour le ZIP de cette version.
    /// Retourne null si l'endpoint n'est pas dispo / pas configuré (ancien serveur),
    /// auquel cas l'appelant retombe sur l'URL publique du manifest.
    /// </summary>
    Task<string?> GetSignedDownloadUrlAsync(string version, CancellationToken ct);

    /// <summary>
    /// Décrypte la clé de license stockée en cache (DPAPI CurrentUser). Retourne null
    /// si pas de clé stockée ou si le déchiffrement échoue (cache déplacé vers une
    /// autre machine ou autre user Windows).
    /// </summary>
    string? GetDecryptedKey();
}
