package pl.firmatpp.kierowca.domain

data class StartupSessionMessage(
    val title: String,
    val detail: String,
)

object StartupSessionPolicy {
    const val OFFLINE_BUTTON_DELAY_SECONDS = 4
    const val OFFLINE_FALLBACK_SECONDS = 15
    const val OFFLINE_FALLBACK_MILLIS = OFFLINE_FALLBACK_SECONDS * 1_000L

    fun remainingSeconds(elapsedSeconds: Int): Int =
        (OFFLINE_FALLBACK_SECONDS - elapsedSeconds).coerceAtLeast(0)

    fun shouldShowOfflineButton(elapsedSeconds: Int, offlineDataAvailable: Boolean): Boolean =
        offlineDataAvailable && elapsedSeconds >= OFFLINE_BUTTON_DELAY_SECONDS

    fun message(elapsedSeconds: Int): StartupSessionMessage = when {
        elapsedSeconds < 3 -> StartupSessionMessage(
            title = "Sprawdzamy zapisaną sesję",
            detail = "Odczytujemy bezpieczne logowanie kierowcy.",
        )
        elapsedSeconds < 6 -> StartupSessionMessage(
            title = "Potwierdzamy logowanie",
            detail = "Łączymy telefon z serwerem.",
        )
        elapsedSeconds < 9 -> StartupSessionMessage(
            title = "Pobieramy aktualne kursy",
            detail = "Synchronizujemy plan dnia i ustawienia aplikacji.",
        )
        elapsedSeconds < 12 -> StartupSessionMessage(
            title = "To trwa dłużej niż zwykle",
            detail = "Przy słabym zasięgu skorzystamy z danych zapisanych w telefonie.",
        )
        else -> StartupSessionMessage(
            title = "Przygotowujemy tryb offline",
            detail = "Za chwilę pokażemy ostatnie zapisane kursy.",
        )
    }

    fun countdownLabel(elapsedSeconds: Int): String {
        val remaining = remainingSeconds(elapsedSeconds)

        return if (remaining > 0) {
            "Tryb offline najpóźniej za $remaining s"
        } else {
            "Otwieramy zapisane dane offline"
        }
    }
}
