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

import com.github.nullptroma.wallenc.domain.interfaces.IVaultInfo
import java.util.UUID

/**
 * Категория vault'а для UI и ветвления — sealed-иерархия в одном модуле,
 * чтобы `when` был exhaustive.
 *
 * `domain` про эти подтипы ничего не знает; внешнее кольцо (`:vault-api`)
 * расширяет [IVaultInfo] (только `uuid`) до структуры с дополнительной
 * категоризацией.
 */
sealed interface VaultDescriptor : IVaultInfo {
    /** Vault, физически живущий на устройстве; без привязки к облачному аккаунту. */
    data class LocalDevice(
        override val uuid: UUID,
    ) : VaultDescriptor

    /** Vault, привязанный к облачному аккаунту через OAuth. */
    data class LinkedRemote(
        override val uuid: UUID,
        val brand: CloudBrand,
        val accountDisplayName: String,
    ) : VaultDescriptor
}
