package ru.forbion.f7cloud.core.auth

import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import okhttp3.Request
import ru.forbion.f7cloud.core.network.NetworkFactory
import ru.forbion.f7cloud.core.network.applyOcsJson

/**
 * Ревокация app password на сервере при выходе (`DELETE /ocs/v2.php/core/apppassword`).
 *
 * Best-effort: если офлайн/ошибка — выход всё равно проходит (локальные данные чистятся
 * вызывающим), протухший токен не критичен. Вызывать ДО [AuthStore.clear].
 */
object AppPasswordRevoker {
    suspend fun revoke(session: AuthSession): Boolean = withContext(Dispatchers.IO) {
        runCatching {
            val client = NetworkFactory.newAuthedClient(
                session.username,
                session.appPassword,
                session.trustAllCerts,
            )
            val request = Request.Builder()
                .url("${session.serverUrl.trimEnd('/')}/ocs/v2.php/core/apppassword?format=json")
                .applyOcsJson()
                .delete()
                .build()
            client.newCall(request).execute().use { it.isSuccessful }
        }.getOrDefault(false)
    }
}
