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

import com.github.nullptroma.wallenc.domain.datatypes.StorageEncryptionInfo
import kotlinx.coroutines.flow.StateFlow

/**
 * Контракт хранилища ([IVault]): коллекция [IStorage] с реактивным состоянием.
 *
 * Слой domain не различает локальные/удалённые/Yandex и т.д. — это общий порт.
 */
interface IVault : IVaultInfo {
    val storages: StateFlow<List<IStorage>>
    /**
     * Идёт загрузка/пересканирование списка storages (например, листинг удалённого vault и init каждого storage).
     */
    val storagesScanInProgress: StateFlow<Boolean>
    val isAvailable: StateFlow<Boolean>
    val totalSpace: StateFlow<Long?>
    val availableSpace: StateFlow<Long?>

    suspend fun createStorage(): IStorage
    suspend fun createStorage(enc: StorageEncryptionInfo): IStorage
    suspend fun remove(storage: IStorage)

    /** Пересканировать список storages (для удалённых vault — повторный листинг и init). */
    suspend fun rescanStorages() {}
}
