package com.ydl.confide.home.presenter

import com.ydl.confide.home.contract.IConfideHomeContract
import com.ydl.confide.home.http.ConfideRecommendParam
import com.ydl.confide.home.model.ConfideHomeModelImpl
import com.ydl.ydlcommon.data.http.RxUtils
import com.ydl.ydlcommon.data.http.ThrowableConsumer
import com.ydl.ydlcommon.mvp.base.BasePresenter
import com.ydl.ydlcommon.mvp.base.IView
import com.yidianling.common.tools.RxNetTool
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.functions.Consumer

/**
 * @author yuanwai
 * @描述:倾诉首页逻辑实现类
 * @Copyright Copyright (c) 2018
 * @Company 壹点灵
 * @date 2018/8/10
 */
class ConfideHomePresenterImpl : BasePresenter<IConfideHomeContract.View, IConfideHomeContract.Model>(),
    IConfideHomeContract.Presenter {

    override fun createModel(): IConfideHomeContract.Model {
        return ConfideHomeModelImpl()
    }

    /**
     * 请求首页数据
     */
    override fun confideHomeRequest(isRefresh: Boolean) {
        if (!RxNetTool.isConnected(mView.getContext())) {
            mView.confideHomeRequestFail()
            return
        }
        val disposable = mModel.confideHomeRequest()
            .map { it }
            .filter { it != null }
            .compose(RxUtils.applySchedulers(mView as IView))
            .doFinally { mView.hideLoading() }
            .subscribe(Consumer {
                mView.confideHomeResponse(it)
            }, object : ThrowableConsumer() {
                override fun accept(msg: String) {
                    mView.confideHomeRequestFail()
                }
            })
    }

    /**
     * 为你推荐列表(筛选调用)
     */
    override fun recommendList(param: ConfideRecommendParam) {
        if (!RxNetTool.isConnected(mView.getContext())) {
            mView.showError1("网络不给力")
            return
        }
        val disposable = mModel.recommendList(param)
            .map { it }
            .filter { it != null }
            .compose(RxUtils.applySchedulers(mView as IView))
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(Consumer {
                mView.recommendListResponse(it)
            }, object : ThrowableConsumer() {
                override fun accept(msg: String) {
                    mView.showError1(msg)
                }
            })
    }

    /**
     * 为你推荐列表(翻页时调用)
     */
    override fun recommendListMore(param: ConfideRecommendParam) {
        if (!RxNetTool.isConnected(mView.getContext())) {
            mView.showError1("网络不给力")
            return
        }
        val disposable = mModel.recommendList(param)
            .map { it }
            .filter { it != null }
            .compose(RxUtils.applySchedulers(mView as IView))
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(Consumer {
                mView.recommendListMoreResponse(it)
            }, object : ThrowableConsumer() {
                override fun accept(msg: String) {
                    mView.showError(msg)
                    mView.showError1(msg)
                }
            })
    }
}