package cn.denua.v2ex.service;

import android.support.annotation.CallSuper;

import com.tencent.bugly.crashreport.CrashReport;

import cn.denua.v2ex.interfaces.IResponsibleView;
import cn.denua.v2ex.interfaces.ResponseListener;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

public class RxObserver2<T> implements Observer<T> {

    private ResponseListener<T> mResponseListener;
    private IResponsibleView mResponsibleView;

    public RxObserver2(IResponsibleView responsibleView, ResponseListener<T> responseListener){
        this.mResponseListener = responseListener;
        this.mResponsibleView = responsibleView;
    }

    @Override
    public void onSubscribe(Disposable d) {
        if (isViewReady()) {
            mResponsibleView.onStartRequest();
        }
    }

    @CallSuper
    @Override
    public void onNext(T t) {
        if (isViewReady() && t != null){
            mResponseListener.onComplete(t);
        }
    }

    @CallSuper
    @Override
    public void onError(Throwable e) {
        e.printStackTrace();
        CrashReport.postCatchedException(e);
        if (isViewReady()){
            mResponseListener.onFailed(e.getMessage());
            mResponsibleView.onFailMsg(e.getMessage());
        }
    }

    @Override
    public void onComplete() {
        if (isViewReady()){
            mResponsibleView.onCompleteRequest();
        }
    }

    private boolean isViewReady(){
        return mResponsibleView.getContextStatus() == IResponsibleView.VIEW_STATUS_ACTIVATED;
    }
}