package com.sambath.kunkhmer.screen.lives

import android.util.Log
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.CreateLivesRequest
import com.sambath.kunkhmer.remote.CreateProductRequest
import com.sambath.kunkhmer.remote.LivesInfo
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

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

    data class LivesViewState(
        val initial: Boolean = false,
        val isProgress: Boolean = false,
        val isLoginSuccess: Boolean = false,
        val error: String? = null,
        val livesData: MutableList<LivesInfo>? = null,
    )

    fun getLives() {
        if (_state.value!!.isProgress) return
        _state.value = prev().copy(isProgress = true)

        disposables.add(
            apiService.getLives()
                .timeout(10, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe({
                    if (it.resultCode == 1) {
                        _state.value = prev().copy(isProgress = false, isLoginSuccess = true, livesData = 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)
                })
        )
    }

    fun createLives(match_fighter_id: String, status: Boolean, url: String) {
        if (_state.value!!.isProgress) return
        _state.value = prev().copy(isProgress = true)
        val request = CreateLivesRequest(match_fighter_id, status, url)

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