package com.casic.smarttube.vm
import androidx.lifecycle.MutableLiveData
import com.casic.smarttube.base.BaseApplication
import com.casic.smarttube.extensions.separateResponseCode
import com.casic.smarttube.extensions.toErrorMessage
import com.casic.smarttube.model.UserDetailModel
import com.casic.smarttube.utils.LocaleConstant
import com.casic.smarttube.utils.retrofit.RetrofitServiceManager
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.BaseViewModel
import com.pengxh.kt.lite.vm.LoadState
class UserViewModel : BaseViewModel() {
private val gson = Gson()
val userDetailModel = MutableLiveData<UserDetailModel>()
fun obtainUserDetail() = launch({
val response = RetrofitServiceManager.obtainUserDetail()
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
val userDetail = gson.fromJson<UserDetailModel>(
response, object : TypeToken<UserDetailModel>() {}.type
)
userDetailModel.value = userDetail
SaveKeyValues.putValue(LocaleConstant.USER_DETAIL_MODEL, gson.toJson(userDetail.data))
} else {
val errorModel = UserDetailModel()
errorModel.code = responseCode
userDetailModel.value = errorModel
//如果此次获取不到用户信息,那么就清空之前的用户缓存,然后让用户重新登录
SaveKeyValues.removeKey(LocaleConstant.USER_DETAIL_MODEL)
}
}, {
it.printStackTrace()
})
fun changePassword(oldPwd: String, newPwd: String) = launch({
loadState.value = LoadState.Loading
val response = RetrofitServiceManager.changePassword(oldPwd, newPwd)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
loadState.value = LoadState.Success
} else {
loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
loadState.value = LoadState.Fail
it.printStackTrace()
})
}