package com.fastaccess.ui.modules.profile.overview;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import com.fastaccess.data.dao.model.Login;
import com.fastaccess.data.dao.model.User;
import com.fastaccess.helper.BundleConstant;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.helper.RxHelper;
import com.fastaccess.provider.rest.RestProvider;
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
/**
* Created by Kosh on 03 Dec 2016, 9:16 AM
*/
class ProfileOverviewPresenter extends BasePresenter<ProfileOverviewMvp.View> implements ProfileOverviewMvp.Presenter {
private boolean isSuccessResponse;
private boolean isFollowing;
private String login;
@Override public void onCheckFollowStatus(@NonNull String login) {
if (!TextUtils.equals(login, Login.getUser().getLogin()))
makeRestCall(RestProvider.getUserService().getFollowStatus(login),
booleanResponse -> {
isSuccessResponse = true;
isFollowing = booleanResponse.code() == 204;
sendToView(ProfileOverviewMvp.View::onInvalidateMenuItem);
});
}
@Override public boolean isSuccessResponse() {
return isSuccessResponse;
}
@Override public boolean isFollowing() {
return isFollowing;
}
@Override public void onFollowButtonClicked(@NonNull String login) {
manageSubscription(RxHelper.getObserver(!isFollowing ? RestProvider.getUserService().followUser(login)
: RestProvider.getUserService().unfollowUser(login))
.subscribe(booleanResponse -> {
if (booleanResponse.code() == 204) {
isFollowing = !isFollowing;
sendToView(ProfileOverviewMvp.View::onInvalidateMenuItem);
}
}, this::onError));
}
@Override public void onError(@NonNull Throwable throwable) {
if (!InputHelper.isEmpty(login)) {
onWorkOffline(login);
}
sendToView(ProfileOverviewMvp.View::onInvalidateMenuItem);
super.onError(throwable);
}
@Override public void onFragmentCreated(@Nullable Bundle bundle) {
if (bundle == null || bundle.getString(BundleConstant.EXTRA) == null) {
throw new NullPointerException("Either bundle or User is null");
}
login = bundle.getString(BundleConstant.EXTRA);
if (login != null) {
makeRestCall(RestProvider.getUserService().getUser(login),
userModel -> {
onSendUserToView(userModel);
if (userModel != null) {
userModel.save(userModel);
if (userModel.getType() != null && userModel.getType().equalsIgnoreCase("user")) {
onCheckFollowStatus(login);
}
}
});
}
}
@Override public void onWorkOffline(@NonNull String login) {
User userModel = User.getUser(login);
if (userModel == null) {
return;
}
onSendUserToView(userModel);
}
@Override public void onSendUserToView(@Nullable User userModel) {
sendToView(view -> view.onInitViews(userModel));
}
@NonNull @Override public String getLogin() {
return login;
}
}