package com.aerotoss.model enum class TransferState { PENDING, TRANSFERRING, COMPLETED, FAILED, CANCELLED } data class TransferProgress( val id: String, val request: TransferRequest, val bytesTransferred: Long, val totalBytes: Long, val state: TransferState, val startTimeMs: Long = System.currentTimeMillis(), val error: String? = null ) { val progress: Float get() = if (totalBytes > 0) bytesTransferred.toFloat() / totalBytes else 0f val isComplete: Boolean get() = state == TransferState.COMPLETED val speed: Long get() { if (state != TransferState.TRANSFERRING || bytesTransferred == 0L) return 0L val elapsed = (System.currentTimeMillis() - startTimeMs).coerceAtLeast(1) return bytesTransferred * 1000 / elapsed } val elapsedMs: Long get() = System.currentTimeMillis() - startTimeMs }