package com.sambath.kunkhmer.screen.news

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.sambath.kunkhmer.app.getErrorCode
import com.sambath.kunkhmer.base.BaseViewModel
import com.sambath.kunkhmer.remote.NewsDetail
import com.sambath.kunkhmer.remote.service.ApiService
import com.sambath.kunkhmer.util.PrefHelper
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import java.util.concurrent.TimeUnit


data class NewsDetailViewState(
    val initial: Boolean = false,
    val isProgress: Boolean = false,
    val isLoginSuccess: Boolean = false,
    val error: String? = null,
    val newsDetailData: NewsDetail? = null,
)

class NewsDetailViewModel(val apiService: ApiService, val prefHelper: PrefHelper) : BaseViewModel()  {
    private val _state = MutableLiveData(NewsDetailViewState())
    val state: LiveData<NewsDetailViewState> = _state
    private fun prev() = _state.value!!

    fun getNewsDetail(id: String){
        if (_state.value!!.isProgress) return
        _state.value = prev().copy(isProgress = true)

        disposables.add(
            apiService.getNewsDetail(id)
                .timeout(10, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe({
                    if (it.resultCode == 1) {
                        _state.value = prev().copy(isProgress = false, isLoginSuccess = true, newsDetailData = it.data!!.obj)
                    } else {
                        _state.value =
                            prev().copy(isProgress = false, error = "[${it.message.description}]")
                    }
                }, {
                    val message: String = "ប្រតិបត្តិការមិនជោគជ័យ " + it.getErrorCode()
                    _state.value = prev().copy(isProgress = false, error = message)
                })
        )
    }
}