Загрузка данных


sealed class OrderStatus {
    object Pending : OrderStatus()

    data class Confirmed(val confirmedAt: String) : OrderStatus()
    data class Shipped(val trackingNumber: String) : OrderStatus()
    data class Delivered(val deliveredAt: String) : OrderStatus()
    data class Cancelled(val reason: String) : OrderStatus()
}

fun describeStatus(status: OrderStatus): String = when (status) {
    OrderStatus.Pending -> "Ожидает подтверждения"
    is OrderStatus.Confirmed -> "Подтверждён: ${status.confirmedAt}"
    is OrderStatus.Shipped -> "Отправлен, трек-номер: ${status.trackingNumber}"
    is OrderStatus.Delivered -> "Доставлен: ${status.deliveredAt}"
    is OrderStatus.Cancelled -> "Отменён. Причина: ${status.reason}"
}

fun main() {
    val statuses = listOf(
        OrderStatus.Pending,
        OrderStatus.Confirmed("2026-09-22 10:00"),
        OrderStatus.Shipped("RU123456789"),
        OrderStatus.Delivered("2026-09-23 18:30"),
        OrderStatus.Cancelled("Клиент передумал")
    )

    statuses.forEach { println(describeStatus(it)) }

    // Если закомментировать одну ветку when, компилятор выдаст ошибку:
    // 'when' expression must be exhaustive. Add the '...' branch or an 'else' branch.
}