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.BaseBean
import com.jld.vod.model.bean.CategoryFatherAllBean
import com.jld.vod.model.bean.CategorySonAllBean
import com.jld.vod.model.bean.MovieByMidBean
import com.jld.vod.repository.MovieRepository
import com.jld.vod.repository.MusicRepository
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 MovieFragmentViewModel  : ViewModel() {
    private val repository: MovieRepository by lazy { MovieRepository() }
    private val musicApi = PagingRetrofitUtils.create(Apis::class.java)

    /**
     * 获取一级分类列表
     */
    fun getCategoryFatherAllByMid(mid:Long,  lid:Long) : Flow<PagingData<CategoryFatherAllBean>> {
        return repository.getCategoryFatherAllByMid(musicApi,mid,lid)
    }

    /**
     * 获取二级分类列表
     */
    fun getategorySonAllByMid(cid:Long,  lid:Long) : Flow<PagingData<CategorySonAllBean>> {
        return repository.getategorySonAllByMid(musicApi,cid,lid)
    }

    /**
     * 获取全部电影列表
     */
    fun getMovieAllList(mid:Long,  lid:Long) : Flow<PagingData<MovieByMidBean>> {
        return repository.getMovieAllList(musicApi,mid,lid)
    }
    /**
     * 获取分类电影列表
     */
    fun getMovieCidList( cid:Long,mid:Long,  lid:Long) : Flow<PagingData<MovieByMidBean>> {
        return repository.getMovieCidList(musicApi,cid,mid,lid)
    }

//    private  var app: Application? = null
//    init{ this.app = app }
//
//    val categoryfatheralldb = Room.databaseBuilder(app, CategoryFatherAllDatabase::class.java, "movie-categoryfatherall").build()
//    val categorysonalldb = Room.databaseBuilder(app, CategorySonAllDatabase::class.java, "movie-categorysonall").build()
//    val moviebymiddb = Room.databaseBuilder(app, MovieByMidDatabase::class.java, "moviebymid").build()
//   // val languagedb = Room.databaseBuilder(app, LanguageDatabase::class.java, "language").build()
//
//    val categoryfatherallList: LiveData<PagedList<CategoryFatherAllBean>> =
//        categoryfatheralldb.categoryFatherAllDao().getAlls().toLiveData(Config(pageSize = 30,enablePlaceholders = true,maxSize = Int.MAX_VALUE))
//
//    val categorysonallList: LiveData<PagedList<CategorySonAllBean>> =
//        categorysonalldb.categorySonAllDao().getAlls().toLiveData(Config(pageSize = 30,enablePlaceholders = true,maxSize = Int.MAX_VALUE))
//
//    val moviebymidList: LiveData<PagedList<MovieByMidBean>> =
//        moviebymiddb.movieByMidDao().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 findMovieByMidliveData: MutableLiveData<BaseBean<List<MovieByMidBean>>> = MutableLiveData()

    /**
     * 根据模块编号获取所有一级类别
     */
//    fun findCategoryFatherAllByMid(mid:String,lid:Long): MutableLiveData<BaseBean<List<CategoryFatherAllBean>>> {
//        findCategoryFatherAllByMidliveData.postValue(BaseBean.loading(null))
//        RetrofitUtils.findCategoryFatherAllByMid(mid,lid,
//            { t ->
//
//             //   LogUtils.logD("CategoryFatherAllBean"+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 { findMovieByMid(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 findCategorySonAllByCid(cid:Long,lid:Long): MutableLiveData<BaseBean<List<CategorySonAllBean>>> {
//        findCategorySonAllByCidliveData.postValue(BaseBean.loading(null))
//        RetrofitUtils.findCategorySonAllByCid(cid,lid,
//            { t ->
//
//                when (t.code) {
//                    20000 ->{
//                        if (t.data!=null)
//                        {
//                            Thread(Runnable{ run {
//                                if (!categorysonalldb.categorySonAllDao().getAll().isEmpty())
//                                {
//                                    categorysonalldb.categorySonAllDao().delete()
//                                    for ((index,e) in t.data.withIndex()){
//                                        categorysonalldb.categorySonAllDao().insertAll(t.data[index])
//                                    }
//                                }else{
//                                    for ((index,e) in t.data.withIndex()){
//                                        categorysonalldb.categorySonAllDao().insertAll(t.data[index])
//                                    }
//                                }
//                            }}).start()
//                        }
//                        findCategorySonAllByCidliveData.postValue(BaseBean.success(t.data))
//                    }
//                    else -> findCategorySonAllByCidliveData.postValue(BaseBean.error(t.message, t.data))
//                }
//            },
//            { ex ->
//                findCategorySonAllByCidliveData.postValue(BaseBean.error(ex.message!!, null))
//            }
//        )
//        return findCategorySonAllByCidliveData
//    }


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

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