package co.electriccoin.zcash.ui.screen.backup.model

import co.electriccoin.zcash.spackle.model.Index
import co.electriccoin.zcash.spackle.model.Progress

enum class BackupStage {
    // Note: the ordinal order is used to manage progression through each stage
    // so be careful if reordering these
    EducationOverview,
    EducationRecoveryPhrase,
    Seed,
    Test,
    Complete;

    /**
     * @see getPrevious
     */
    fun hasPrevious() = ordinal > 0

    /**
     * @see getNext
     */
    fun hasNext() = ordinal < values().size - 1

    /**
     * @return Previous item in ordinal order.  Returns the first item when it cannot go further back.
     */
    fun getPrevious() = values()[maxOf(0, ordinal - 1)]

    /**
     * @return Last item in ordinal order.  Returns the last item when it cannot go further forward.
     */
    fun getNext() = values()[minOf(values().size - 1, ordinal + 1)]

    /**
     * @return Last item in ordinal order.  Returns the last item when it cannot go further forward.
     */
    fun getProgress() = Progress(Index(ordinal), Index(values().size - 1))
}
