package com.aiosman.ravenow.data

import com.aiosman.ravenow.data.api.ErrorCode
import com.aiosman.ravenow.data.api.toErrorCode
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName
import okhttp3.ResponseBody

/**
 * 错误返回
 */
class ServiceException(
    override val message: String,
    val code: Int? = 0,
    val data: Any? = null,
    val error: String? = null,
    val name: String? = null,
    val errorType: ErrorCode = ErrorCode.UNKNOWN
) : Exception(
    message
)

data class ApiErrorResponse(
    @SerializedName("code")
    val code: Int?,
    @SerializedName("error")
    val error: String?,
    @SerializedName("message")
    val name: String?,
) {
    fun toServiceException(): ServiceException {
        return ServiceException(
            message = error ?: name ?: "",
            code = code,
            error = error,
            name = name,
            errorType = (code ?: 0).toErrorCode()
        )
    }
}

fun parseErrorResponse(errorBody: ResponseBody?): ApiErrorResponse? {
    return errorBody?.let {
        val gson = Gson()
        gson.fromJson(it.charStream(), ApiErrorResponse::class.java)
    }
}