package com.esoxjem.movieguide.listing;
import android.support.annotation.NonNull;
import com.esoxjem.movieguide.Api;
import com.esoxjem.movieguide.Movie;
import com.esoxjem.movieguide.favorites.FavoritesInteractor;
import com.esoxjem.movieguide.listing.sorting.SortType;
import com.esoxjem.movieguide.listing.sorting.SortingOptionStore;
import com.esoxjem.movieguide.network.RequestGenerator;
import com.esoxjem.movieguide.network.RequestHandler;
import org.json.JSONException;
import java.io.IOException;
import java.util.List;
import okhttp3.Request;
import rx.Observable;
/**
* @author arun
*/
class MoviesListingInteractorImpl implements MoviesListingInteractor
{
private FavoritesInteractor favoritesInteractor;
private RequestHandler requestHandler;
private SortingOptionStore sortingOptionStore;
MoviesListingInteractorImpl(FavoritesInteractor favoritesInteractor,
RequestHandler requestHandler, SortingOptionStore store)
{
this.favoritesInteractor = favoritesInteractor;
this.requestHandler = requestHandler;
sortingOptionStore = store;
}
@Override
public Observable<List<Movie>> fetchMovies()
{
return Observable.fromCallable(this::getMovieList);
}
private List<Movie> getMovieList() throws IOException, JSONException
{
int selectedOption = sortingOptionStore.getSelectedOption();
if (selectedOption == SortType.MOST_POPULAR.getValue())
{
return fetchMovieList(Api.GET_POPULAR_MOVIES);
} else if (selectedOption == SortType.HIGHEST_RATED.getValue())
{
return fetchMovieList(Api.GET_HIGHEST_RATED_MOVIES);
} else
{
return favoritesInteractor.getFavorites();
}
}
@NonNull
private List<Movie> fetchMovieList(String url) throws IOException, JSONException
{
Request request = RequestGenerator.get(url);
String response = requestHandler.request(request);
return MoviesListingParser.parse(response);
}
}