package com.popo.module_detail.mvp.presenter;

import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.OnLifecycleEvent;

import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils;
import com.popo.module_detail.app.utils.SankoListener;
import com.popo.module_detail.mvp.contract.DetailContract;
import com.popo.module_detail.mvp.model.entity.GameDetailBean;

import javax.inject.Inject;

import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import me.jessyan.rxerrorhandler.handler.RetryWithDelay;
import timber.log.Timber;

public class DetailPresenter extends BasePresenter<DetailContract.Model,DetailContract.View>{
    @Inject
    RxErrorHandler mErrorHandler;

    @Inject DetailPresenter(DetailContract.Model model,DetailContract.View view){
        super(model,view);
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    void onCreate(){

    }
    public void requestSteamGameDetail(String id,String name,boolean isBundle){
        mModel.getSteamGameDetail(id,name,isBundle)
                .subscribeOn(Schedulers.io())
                .retryWhen(new RetryWithDelay(3,2))
                .subscribeOn(AndroidSchedulers.mainThread())
                .observeOn(AndroidSchedulers.mainThread())
                .doFinally(()->{
                    mRootView.hideLoading();
                })
                .compose(RxLifecycleUtils.bindToLifecycle(mRootView))
                .subscribe(new ErrorHandleSubscriber<GameDetailBean>(mErrorHandler) {
                    @Override
                    public void onNext(GameDetailBean gameDetailBean) {
                        if(!isBundle){
                            requestSteamGameReview(id, name,gameDetailBean);
                        }else {
                            mRootView.onSteamFinished(gameDetailBean);
                            mRootView.hideLoading();
                        }
                    }
                });
    }
    public void requestSteamGameReview(String id,String name,GameDetailBean glb){
        mModel.getSteamGameReview(id, name)
                .subscribeOn(Schedulers.io())
                .retryWhen(new RetryWithDelay(3,2))
                .subscribeOn(AndroidSchedulers.mainThread())
                .observeOn(AndroidSchedulers.mainThread())
                .doFinally(()->{
                    mRootView.hideLoading();
                })
                .compose(RxLifecycleUtils.bindToLifecycle(mRootView))
                .subscribe(new ErrorHandleSubscriber<GameDetailBean>(mErrorHandler) {
                    @Override
                    public void onNext(GameDetailBean gameDetailBean) {
                        glb.setReviews(gameDetailBean.getReviews());
                        glb.setId(id);
                        glb.setTitle(name);
                        mRootView.onSteamFinished(glb);
                    }
                });
    }

    public void requestSankoGameDetail(String product_id,String id) {
       mModel.getSankoGame(product_id, id, new SankoListener() {
           @Override
           public void onfinished(GameDetailBean bean) {
               mRootView.onSankoFinished(bean);
           }
       });
    }
}