package com.casic.smarttube.vm import android.content.Context import androidx.lifecycle.MutableLiveData import com.casic.smarttube.extensions.separateResponseCode import com.casic.smarttube.extensions.toErrorMessage import com.casic.smarttube.model.AreaModel import com.casic.smarttube.model.DistrictModel import com.casic.smarttube.model.PublicKeyModel import com.casic.smarttube.model.StreetModel import com.casic.smarttube.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.pengxh.kt.lite.base.BaseViewModel import com.pengxh.kt.lite.extensions.launch import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.LoadState class AuthenticateViewModel : BaseViewModel() { private val gson = Gson() val keyData = MutableLiveData<PublicKeyModel>() val areaData = MutableLiveData<AreaModel>() val districtData = MutableLiveData<DistrictModel>() val streetData = MutableLiveData<StreetModel>() fun getPublicKey(context: Context) = launch({ loadState.value = LoadState.Loading val response = RetrofitServiceManager.authenticate() val responseCode = response.separateResponseCode() if (responseCode == 200) { keyData.value = gson.fromJson<PublicKeyModel>( response, object : TypeToken<PublicKeyModel>() {}.type ) } else { response.toErrorMessage().show(context) } }, { it.printStackTrace() }) /** * 根据部门获取区ID */ fun getAreaByDept(context: Context, deptId: String) = launch({ val response = RetrofitServiceManager.getAreaByDept(deptId) val responseCode = response.separateResponseCode() if (responseCode == 200) { areaData.value = gson.fromJson<AreaModel>( response, object : TypeToken<AreaModel>() {}.type ) } else { response.toErrorMessage().show(context) } }, { it.printStackTrace() }) /** * 区/县等 */ fun getDistrict(context: Context, pid: String) = launch({ val response = RetrofitServiceManager.getDistrict(pid) val responseCode = response.separateResponseCode() if (responseCode == 200) { districtData.value = gson.fromJson<DistrictModel>( response, object : TypeToken<DistrictModel>() {}.type ) } else { response.toErrorMessage().show(context) } }, { it.printStackTrace() }) /** * 街道 */ fun getStreet(context: Context, areaId: String) = launch({ val response = RetrofitServiceManager.getStreet(areaId) val responseCode = response.separateResponseCode() if (responseCode == 200) { streetData.value = gson.fromJson<StreetModel>( response, object : TypeToken<StreetModel>() {}.type ) } else { response.toErrorMessage().show(context) } }, { it.printStackTrace() }) }