package com.github.nullptroma.wallenc.ui.screens.sync

import com.github.nullptroma.wallenc.ui.resources.UserNotification
import com.github.nullptroma.wallenc.domain.interfaces.StorageSyncGroupEncryptionKind
import java.util.UUID

enum class StorageSyncEncryptionKind {
    NotEncrypted,
    EncryptedOpened,
    EncryptedClosed,
}

data class StorageSyncStorageUi(
    val uuid: UUID,
    val name: String,
    val encryptionKind: StorageSyncEncryptionKind,
    /** false, если storage есть в дереве, но сейчас недоступен (например, vault offline). */
    val isReachable: Boolean = true,
    val children: List<StorageSyncStorageUi> = emptyList(),
)

data class StorageSyncVaultUi(
    val uuid: UUID,
    val title: String,
    val type: String,
    val storages: List<StorageSyncStorageUi>,
)

data class StorageSyncGroupUi(
    val id: String,
    val storageUuids: Set<UUID>,
    val encryptionKind: StorageSyncGroupEncryptionKind = StorageSyncGroupEncryptionKind.UNSET,
    val incompatibleStorageUuids: Set<UUID> = emptySet(),
)

data class StorageSyncScreenState(
    val groups: List<StorageSyncGroupUi> = emptyList(),
    val vaults: List<StorageSyncVaultUi> = emptyList(),
    val expandedVaultUuids: Set<UUID> = emptySet(),
    val pickerGroupId: String? = null,
    val isBusy: Boolean = false,
    /** Долгая синхронизация storages через пайплайн задач. */
    val isStorageSyncRunning: Boolean = false,
    /** Доля прогресса активной синхронизации; null — неопределённый прогресс. */
    val storageSyncProgressFraction: Float? = null,
    /** Подпись этапа из пайплайна (если есть). */
    val storageSyncProgressLabel: String? = null,
    /** Любой vault ещё загружает список storages — UUID из группы могут появиться позже. */
    val anyVaultStoragesScanning: Boolean = false,
    val userMessage: UserNotification? = null,
)
