package pl.firmatpp.kierowca.data.upload

import pl.firmatpp.kierowca.data.ApiError
import pl.firmatpp.kierowca.data.ApiErrorKind

object PhotoUploadFailureDetails {
    fun fromApiError(error: ApiError): String {
        val type = when (error.kind) {
            ApiErrorKind.Network -> "błąd komunikacji"
            ApiErrorKind.Server,
            ApiErrorKind.RateLimited,
            ApiErrorKind.Validation,
            ApiErrorKind.Forbidden,
            ApiErrorKind.Auth,
            ApiErrorKind.Conflict,
            -> "błąd serwera"
            ApiErrorKind.Unknown -> "błąd aplikacji"
        }

        return buildString {
            appendLine("Typ: $type")
            appendLine("Komunikat: ${error.message}")
            error.statusCode?.let { appendLine("HTTP: $it") }
            error.code?.takeIf { it.isNotBlank() }?.let { appendLine("Kod: $it") }
            error.responseBody
                ?.takeIf { it.isNotBlank() }
                ?.let {
                    appendLine("Odpowiedź serwera:")
                    append(it.take(MAX_RESPONSE_CHARS))
                    if (it.length > MAX_RESPONSE_CHARS) append("...")
                }
        }.trim()
    }

    fun local(message: String): String =
        "Typ: błąd aplikacji\nKomunikat: $message"

    private const val MAX_RESPONSE_CHARS = 1200
}
