package cash.z.ecc.android.sdk.demoapp.model

import kotlin.time.Duration.Companion.days
import kotlin.time.Duration.Companion.minutes

/**
 * Represents a state of current fiat currency conversion to ZECs.
 */
sealed class FiatCurrencyConversionRateState {
    /**
     * @param formattedFiatValue A fiat value formatted as a localized string.  E.g. $1.00.
     */
    data class Current(val formattedFiatValue: String) : FiatCurrencyConversionRateState()

    /**
     * @param formattedFiatValue A fiat value formatted as a localized string.  E.g. $1.00.
     */
    data class Stale(val formattedFiatValue: String) : FiatCurrencyConversionRateState()
    object Unavailable : FiatCurrencyConversionRateState()

    companion object {

        /**
         * Cutoff negative age.  Some users may intentionally set their clock forward 10 minutes
         * because they're always late to things.  This allows the app to mostly work for those users,
         * while still failing if the clock is way off.
         */
        val FUTURE_CUTOFF_AGE_INCLUSIVE = 10.minutes

        /**
         * Cutoff age for next attempt to refresh the conversion rate from the API.
         */
        val CURRENT_CUTOFF_AGE_INCLUSIVE = 1.minutes

        /**
         * Cutoff age for displaying conversion rate from prior app launches or background refresh.
         */
        val STALE_CUTOFF_AGE_INCLUSIVE = 1.days
    }
}
