namespace PSLauncher.Core.Security;

/// <summary>
/// Gestion du verrouillage par mot de passe de la section Avancés des Settings.
///
/// Le hash du password vient du manifest signé (<see cref="PSLauncher.Models.RemoteManifest.SettingsLockPasswordHash"/>) :
/// administré centralement depuis le backoffice, intégrité garantie par la signature
/// Ed25519. Quand le hash est non-null/non-vide, les paramètres avancés sont gated
/// derrière un dialog de saisie de password.
///
/// L'unlock est valable pour la session courante du launcher uniquement
/// (pas persisté sur disque). Au redémarrage, l'utilisateur doit re-saisir.
/// </summary>
public interface ISettingsLockService
{
    /// <summary>True s'il y a un hash défini dans le manifest courant ET qu'il n'a pas été déverrouillé cette session.</summary>
    bool IsLocked { get; }

    /// <summary>True s'il y a un hash défini (lock configuré). Si false, pas de lock, accès libre.</summary>
    bool HasLockConfigured { get; }

    /// <summary>Tente de déverrouiller avec un password. True si match (déverrouillage actif), false sinon.</summary>
    bool TryUnlock(string password);

    /// <summary>Force le re-verrouillage (par exemple à la fermeture du dialog Settings).</summary>
    void Lock();

    /// <summary>Met à jour le hash du password (appelé après chaque fetch manifest réussi).</summary>
    void SetPasswordHash(string? hash);
}
