package cn.muchinfo.rma.view.base.login

import androidx.lifecycle.MutableLiveData
import cn.muchinfo.rma.netManage.base.InteractiveException
import cn.muchinfo.rma.view.MyApplication
import cn.muchinfo.rma.view.autoWidget.guard
import cn.muchinfo.rma.view.base.BaseViewModel
import cn.muchinfo.rma.view.base.app.Constant
import com.blankj.utilcode.util.SPUtils
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import mtp.polymer.com.autowidget.expand.isNumber
import mtp.polymer.com.autowidget.utils.TaskUiModel
import okhttp3.Dispatcher

/**
 * 登录界面模型
 */
class LoginViewModel : BaseViewModel() {

    val loadingDialogStatus: MutableLiveData<TaskUiModel> = MutableLiveData() // 加载状态控制

    /**
     * 账户登录
     * @param code String 登录代码，可以是手机号码、LoginID或LoginCode
     * @param password String 登录密码
     * @param callback Function2<[@kotlin.ParameterName] Boolean, [@kotlin.ParameterName] Error?, Unit>
     */
    fun login(
        code: String,
        password: String,
        callback: (isCompleted: Boolean, err: Error?) -> Unit
    ) {
        val accountManager = MyApplication.getInstance()?.accountManager.guard {
            callback(false, Error("对象未初始化"))
            return
        }

        // 先获取LoginID
        accountManager.queryLoginID(code) { isCompleted, err, loginID ->
            if (!isCompleted) {
                callback(false, err)
                return@queryLoginID
            }

            //如果返回的loginid不是纯数字，则抛出
            if (loginID?.isNumber()?.not() == true){
                loadingDialogStatus.postValue(TaskUiModel.failed(InteractiveException(errorMessage = "账号不存在")))
                return@queryLoginID
            }

            // 获取交易接入地址
            val ip = SPUtils.getInstance().getString(Constant.tradeHost)
            val port = SPUtils.getInstance().getString(Constant.tradePort)
            GlobalScope.launch {
                accountManager.login(
                    IP = ip,
                    port = port,
                    loginID = loginID!!,
                    password = password,
                    callback = callback
                )
            }
        }
    }

    /**
     * 登录后的查询
     * 1、loginAccount 登录账号
     * 2、userAccount
     * 3、userInfo 用户信息
     * 4、markets 暂时无用
     * 5、goodsgroups 商品
     * 6、externalExchanges 外部交易所
     * markets暂时无用。
     * 外面交易所和商品的对应方法：商品组里有一个Exexchangeid字段，这个对应外部交易所表里的autoid
     */
    fun loginQuery(callback: (isCompleted: Boolean, err: Error?) -> Unit) {

        val accountManager = MyApplication.getInstance()?.accountManager.guard {
            callback(false, Error("对象未初始化"))
            return
        }
        accountManager.loginQuery { isCompleted, err ->
            run {
                if (isCompleted) {
                    callback(true, null)
                } else {
                    callback(false, err)
                }
            }
        }
    }
}