package com.richardradics.cleanrx.mvp.presenter;
import com.richardradics.cleanrx.app.CleanErrorHandler;
import com.richardradics.cleanrx.domain.City;
import com.richardradics.cleanrx.exception.GetCitiesException;
import com.richardradics.cleanrx.interactor.GetCitiesUseCase;
import com.richardradics.cleanrx.mvp.view.MainView;
import com.richardradics.cleanrx.mvp.view.model.MainListViewModel;
import com.richardradics.core.interactor.DefaultSubscriber;
import com.richardradics.core.mvp.Presenter;
import com.richardradics.core.mvp.View;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
/**
* Created by radicsrichard on 15. 06. 01..
*/
public class MainPresenter extends DefaultSubscriber<List<City>> implements Presenter {
private GetCitiesUseCase getCitiesUseCase;
private MainView mainView;
@Inject
protected CleanErrorHandler cleanErrorHandler;
@Inject
public MainPresenter(GetCitiesUseCase getCitiesUseCase) {
this.getCitiesUseCase = getCitiesUseCase;
}
@Override
public void setView(View view) {
this.mainView = (MainView) view;
initView();
}
private void initView() {
try {
getCitiesUseCase.execute(this);
mainView.showLoading("Loading...");
}catch (Exception e){
cleanErrorHandler.logException(e);
}
}
@Override
public void resume() {
//no-op
}
@Override
public void pause() {
//no-op
}
@Override
public void destroy() {
}
@Override
public void onError(Throwable e) {
super.onError(e);
cleanErrorHandler.handlerError(new GetCitiesException());
mainView.hideLoading(false);
}
@Override
public void onNext(List<City> cities) {
super.onNext(cities);
mainView.setListViewModels(convertToMainModel(cities));
}
public List<MainListViewModel> convertToMainModel(List<City> cityList) {
List<MainListViewModel> modelList = new ArrayList<>();
try {
int pictureId = 0;
for (City item : cityList) {
MainListViewModel mainListViewModel = new MainListViewModel();
mainListViewModel.setId(item.getId());
mainListViewModel.setImageUrl("http://lorempixel.com/400/200/city/" + (pictureId + 1));
mainListViewModel.setTitle(item.getName());
modelList.add(mainListViewModel);
pictureId++;
if (9 < pictureId) { //lorempixels gives only 10 image :)
pictureId = 0;
}
}
} catch (Exception e) {
}
return modelList;
}
@Override
public void onCompleted() {
super.onCompleted();
cleanErrorHandler.showSnackbar("Items loaded!");
mainView.hideLoading(true);
}
}