package com.github.nullptroma.wallenc.vault.contract

import java.util.UUID

/**
 * Контракт регистрации/удаления удалённого vault'а.
 * Реализуется тем же объектом, что и `domain.IVaultsManager`.
 */
interface VaultRegistrar {
    /**
     * Зарегистрировать новый удалённый vault по «полезной нагрузке» из
     * [VaultLinkOutcome.Success]. Если тип [registration] неизвестен реализации,
     * бросает [IllegalArgumentException].
     */
    suspend fun register(registration: VaultRegistration)

    /** Удалить ранее зарегистрированный vault по идентификатору. */
    suspend fun unregister(vaultUuid: UUID)

    /**
     * Повторная попытка инициализации/подключения удалённого vault.
     * Возвращает false, если vault не найден или не поддерживает retry.
     */
    suspend fun retry(vaultUuid: UUID): Boolean
}
