package com.casic.br.vm import androidx.lifecycle.MutableLiveData import com.amap.api.location.AMapLocation import com.casic.br.base.BaseApplication import com.casic.br.extensions.separateResponseCode import com.casic.br.extensions.toErrorMessage import com.casic.br.model.OtherDeviceListModel import com.casic.br.model.OtherDeviceModel import com.casic.br.model.UserDetailModel import com.casic.br.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.vm.BaseViewModel import com.pengxh.kt.lite.vm.LoadState import com.tuya.smart.sdk.bean.DeviceBean import org.json.JSONObject class DeviceViewModel : BaseViewModel() { private val gson by lazy { Gson() } val listModel = MutableLiveData<OtherDeviceListModel>() val deviceModel = MutableLiveData<OtherDeviceModel>() fun addDevice( devResp: DeviceBean, userModel: UserDetailModel.DataModel, iotDevice: String, aMapLocation: AMapLocation ) = launch({ val response = RetrofitServiceManager.addDevice( devResp, userModel, iotDevice, aMapLocation.province + aMapLocation.district ) 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() }) fun addDeviceData(dataModel: JSONObject) = launch({ RetrofitServiceManager.addDeviceData(dataModel) }, { it.printStackTrace() }) fun obtainOtherDeviceListByPage() = launch({ val response = RetrofitServiceManager.obtainOtherDeviceListByPage() val responseCode = response.separateResponseCode() if (responseCode == 200) { listModel.value = gson.fromJson<OtherDeviceListModel>( response, object : TypeToken<OtherDeviceListModel>() {}.type ) } else { response.toErrorMessage().show(BaseApplication.obtainInstance()) } }, { it.printStackTrace() }) fun obtainDeviceDetail(id: String) = launch({ val response = RetrofitServiceManager.obtainDeviceDetail(id) val responseCode = response.separateResponseCode() if (responseCode == 200) { deviceModel.value = gson.fromJson<OtherDeviceModel>( response, object : TypeToken<OtherDeviceModel>() {}.type ) } else { response.toErrorMessage().show(BaseApplication.obtainInstance()) } }, { it.printStackTrace() }) }