package com.github.nullptroma.wallenc.domain.interfaces

import com.github.nullptroma.wallenc.domain.datatypes.EncryptKey
import kotlinx.coroutines.flow.StateFlow
import java.util.UUID

/**
 * Управляет виртуальными (расшифрованными) представлениями хранилищ.
 * Не является vault-провайдером.
 */
interface IUnlockManager {
    /**
     * Хранилища, для которых есть ключ шифрования
     */
    val openedStorages: StateFlow<Map<UUID, IStorage>>
    fun getOpenedStorageKey(uuid: UUID): EncryptKey?

    suspend fun open(storage: IStorage, key: EncryptKey, rememberPassword: Boolean = true): IStorage
    /** Сохранить ключ для auto-open без открытия виртуального storage. */
    suspend fun rememberKey(storage: IStorage, key: EncryptKey)
    suspend fun close(storage: IStorage)
    suspend fun close(uuid: UUID)
}