package com.module.backstage.vm

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.module.backstage.repo.OtherFragmentRepo
import com.module.pay.common.OtherEnum
import com.quyunshuo.androidbaseframemvvm.base.R
import com.quyunshuo.androidbaseframemvvm.base.mvvm.vm.BaseViewModel
import com.quyunshuo.androidbaseframemvvm.base.utils.SpUtils
import com.quyunshuo.androidbaseframemvvm.common.constant.MMKVName
import com.quyunshuo.androidbaseframemvvm.common.util.UiUtil
import com.quyunshuo.androidbaseframemvvm.common.util.XLogUtil
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject

/**
 * HomeFragment 的 VM 层
 *
 * @author Qu Yunshuo
 * @since 2021/8/5 11:11 下午
 */
@HiltViewModel//@HiltViewModel 注解的作用是将 ViewModel 标记为可以由 Hilt 管理的依赖项。当你将 @HiltViewModel 注解添加到 ViewModel 类上时，Hilt 会自动处理 ViewModel 的创建和注入过程。这样，你就不需要手动调用 ViewModelProvider 来获取 ViewModel 实例了。
class OtherFragmentVM @Inject constructor(private val mRepo: OtherFragmentRepo) : BaseViewModel() {


    //搜索功能【通信设置、系统设置、功能开启等等】
    //1. 首先我们需要先添加我们的所有设置。【通过一个bean来存储，一个list来存储所有的】
    //bean：名称，分类，类型【开关类、输入类、多值类、音量调节】，value
    //举例：优惠券、功能开启、开关、false
    //2. 首先把所有的功能项拿到，进行遍历
    //3. 具体的数据展示:如何展示呢？navigation+fragment？？【搜索的时候展示另外一个fragment，而不搜索的时候展示其中一个。】


    //1.拿到所有的通讯设置
    var list: ArrayList<OtherEnum> = ArrayList()


    private var _readAllDataSuccess = MutableLiveData<Int>()//是否读取所有数据成功
    val readAllDataSuccess: LiveData<Int> get() = _readAllDataSuccess

    fun search(searchText: CharSequence) {
        var isOpenChangLogo = SpUtils.getBoolean(
            MMKVName.IS_SHOW_CHANGLOGE,
            false
        )
        list.clear()
        val arrayList = mRepo.arrayList
        XLogUtil.d("arrayList :$arrayList")
        for (otherEnum in arrayList) {
            val stringRes = UiUtil.getStringRes(otherEnum.nameId).uppercase()
            if (stringRes.contains(searchText.toString().uppercase())) {
                if (isOpenChangLogo == true && UiUtil.getStringRes(R.string.base_logo_text)
                        .contains(searchText.toString().uppercase())
                ) {
                    return
                }
                list.add(otherEnum)
            }
        }
        _readAllDataSuccess.value = list.size
    }

}