RequestProgress.kt

/*
 * This file is part of GNU Taler
 * (C) 2026 Taler Systems S.A.
 *
 * GNU Taler is free software; you can redistribute it and/or modify it under the
 * terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 3, or (at your option) any later version.
 *
 * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
 */

package net.taler.wallet.main

import net.taler.wallet.backend.NotificationPayload
import net.taler.wallet.backend.ProgressPhase

data class RequestProgress(
    val operation: String,
    val progressToken: String,
    val phase: ProgressPhase,
    val retrying: Boolean = false,
)

internal fun RequestProgress?.withPhase(
    payload: NotificationPayload.RequestProgressPhase,
): RequestProgress? {
    if (payload.phase == ProgressPhase.Done) {
        return if (this?.progressToken == payload.progressToken) null else this
    }
    return if (this?.progressToken == payload.progressToken) {
        copy(phase = payload.phase)
    } else {
        RequestProgress(
            operation = payload.operation,
            progressToken = payload.progressToken,
            phase = payload.phase,
        )
    }
}

internal fun RequestProgress?.withError(
    payload: NotificationPayload.RequestProgressError,
): RequestProgress? = if (this?.progressToken == payload.progressToken) {
    copy(retrying = true)
} else {
    this
}