package com.jld.vod.viewmodel

import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.paging.Config
import androidx.paging.PagedList
import androidx.paging.PagingData
import androidx.paging.toLiveData
import androidx.room.Room
import com.jld.vod.db.*
import com.jld.vod.interfaces.remote.Apis
import com.jld.vod.model.bean.*
import com.jld.vod.repository.AboutRepository
import com.jld.vod.repository.MusicRepository
import com.jld.vod.utils.LogUtils
import com.jld.vod.utils.http.RetrofitUtils
import com.jld.vod.utils.SharedPrefUtils
import com.jld.vod.utils.http.PagingRetrofitUtils
import kotlinx.coroutines.flow.Flow


/**
 * @author ZhaoFuXin
 * @Email：18276061387@163.com
 * @description:
 * @date :2020/1/10 13:40
 */
class MusicFragmentViewModel  : ViewModel() {
    private val repository: MusicRepository by lazy { MusicRepository() }
    private val musicApi = PagingRetrofitUtils.create(Apis::class.java)

    fun getCategoryFatherAllByMid(mid:Long,  lid:Long) : Flow<PagingData<CategoryFatherAllBean>> {
        return repository.getCategoryFatherAllByMid(musicApi,mid,lid)
    }

    fun getMusicByCid(cid:Long,mid:Long,  lid:Long) : Flow<PagingData<MusicByMidBean>> {
        return repository.getMusiCidList(musicApi,cid,mid,lid)
    }
    fun getMusicBymid(mid:Long,lid:Long) : Flow<PagingData<MusicByMidBean>> {
        return repository.getMusicAllList(musicApi,mid,lid)
    }

//    private  var app: Application? = null
//    init{ this.app = app }
//
//    val categoryfatheralldb = Room.databaseBuilder(app, CategoryFatherAllDatabase::class.java, "music-categoryfatherall").build()
//    val categorysonalldb = Room.databaseBuilder(app, CategorySonAllDatabase::class.java, "music-categorysonall").build()
//    val musicbymiddb = Room.databaseBuilder(app, MusicByMidDatabase::class.java, "musicbymid").build()
//
//    val categoryfatherallList: LiveData<PagedList<CategoryFatherAllBean>> =
//        categoryfatheralldb.categoryFatherAllDao().getAlls().toLiveData(Config(pageSize = 30,enablePlaceholders = true,maxSize = Int.MAX_VALUE))
//
//    val musicbymidList: LiveData<PagedList<MusicByMidBean>> =
//        musicbymiddb.musicByMidDao().getAlls().toLiveData(Config(pageSize = 30,enablePlaceholders = true,maxSize = Int.MAX_VALUE))


    //从网络获取到的数据
//    val findCategoryFatherAllByMidliveData: MutableLiveData<BaseBean<List<CategoryFatherAllBean>>> = MutableLiveData()
//    val findCategorySonAllByCidliveData: MutableLiveData<BaseBean<List<CategorySonAllBean>>> = MutableLiveData()
//    val findMusicByMidliveData: MutableLiveData<BaseBean<List<MusicByMidBean>>> = MutableLiveData()


    /**
     * 根据模块编号获取所有一级类别
     */
//    fun findCategoryFatherAllByMid(mid:String,lid:Long): MutableLiveData<BaseBean<List<CategoryFatherAllBean>>> {
//        findCategoryFatherAllByMidliveData.postValue(BaseBean.loading(null))
//        RetrofitUtils.findCategoryFatherAllByMid(mid,lid,
//            { t ->
//                LogUtils.logD("findCategoryFatherAllByMid"+t)
//                when (t.code) {
//                    20000 ->{
//                        if (t.data!!.size != 0)
//                        {
//                            Thread(Runnable{ run {
//
//                                //获取电影列表
//                                val language_lid = SharedPrefUtils.getString(app,"language_lid")
//                              //  t.data[0].mid?.let { findMusicByMid(it,language_lid.toLong()) }
//
//                                if (!categoryfatheralldb.categoryFatherAllDao().getAll().isEmpty())
//                                {
//                                    categoryfatheralldb.categoryFatherAllDao().delete()
//                                    for ((index,e) in t.data.withIndex()){
//                                        categoryfatheralldb.categoryFatherAllDao().insertAll(t.data[index])
//                                    }
//                                }else{
//                                    for ((index,e) in t.data.withIndex()){
//                                        categoryfatheralldb.categoryFatherAllDao().insertAll(t.data[index])
//                                    }
//                                }
//                            }}).start()
//                        }
//                        findCategoryFatherAllByMidliveData.postValue(BaseBean.success(t.data))
//                    }
//                    else -> findCategoryFatherAllByMidliveData.postValue(BaseBean.error(t.message, t.data))
//                }
//            },
//            { ex ->
//                findCategoryFatherAllByMidliveData.postValue(BaseBean.error(ex.message!!, null))
//            }
//        )
//        return findCategoryFatherAllByMidliveData
//    }

    /**
     * 根据模块编号查询音乐信息
     */
//    fun findMusicByMid(mid:Long,lid:Long): MutableLiveData<BaseBean<List<MusicByMidBean>>> {
//        findMusicByMidliveData.postValue(BaseBean.loading(null))
//        RetrofitUtils.findMusicByMid(mid,lid,
//            { t ->
//                when (t.code) {
//                    20000 ->{
//                        if (t.data!=null)
//                        {
//                            Thread(Runnable{ run {
//                                if (!musicbymiddb.musicByMidDao().getAll().isEmpty())
//                                {
//                                  //  musicbymiddb.musicByMidDao().delete()
//                                    for ((index,e) in t.data.withIndex()){
//                                        musicbymiddb.musicByMidDao().insertAll(t.data[index])
//                                    }
//                                }else{
//                                    for ((index,e) in t.data.withIndex()){
//                                        musicbymiddb.musicByMidDao().insertAll(t.data[index])
//                                    }
//                                }
//                            }}).start()
//                        }
//                        findMusicByMidliveData.postValue(BaseBean.success(t.data))
//                    }
//                    else -> findMusicByMidliveData.postValue(BaseBean.error(t.message, t.data))
//                }
//            },
//            { ex ->
//                findMusicByMidliveData.postValue(BaseBean.error(ex.message!!, null))
//            }
//        )
//        return findMusicByMidliveData
//    }

    /**
     * 根据类别编号获取音乐信息
     */
//    fun findMusicByCid(cid: Long,mid:Long,lid:Long): MutableLiveData<BaseBean<List<MusicByMidBean>>> {
//        findMusicByMidliveData.postValue(BaseBean.loading(null))
//        RetrofitUtils.findMusicByCid(cid,mid,lid,
//            { t ->
//                when (t.code) {
//                    20000 ->{
//                        if (t.data!=null)
//                        {
//                            Thread(Runnable{ run {
//                                if (!musicbymiddb.musicByMidDao().getAll().isEmpty())
//                                {
//                                    musicbymiddb.musicByMidDao().delete()
//                                    for ((index,e) in t.data.withIndex()){
//                                        musicbymiddb.musicByMidDao().insertAll(t.data[index])
//                                    }
//                                }else{
//                                    for ((index,e) in t.data.withIndex()){
//                                        musicbymiddb.musicByMidDao().insertAll(t.data[index])
//                                    }
//                                }
//                            }}).start()
//                        }
//                        findMusicByMidliveData.postValue(BaseBean.success(t.data))
//                    }
//                    else -> findMusicByMidliveData.postValue(BaseBean.error(t.message, t.data))
//                }
//            },
//            { ex ->
//                LogUtils.logD("result"+ex)
//                findMusicByMidliveData.postValue(BaseBean.error(ex.message!!, null))
//            }
//        )
//        return findMusicByMidliveData
//    }
}