package repository.datasource;

import com.mgdiez.domain.bean.StatisticBo;

import java.util.List;

import rx.Observable;

/**
 * Interface that represents a data store from where data is retrieved.
 */
public interface StatisticDatastore {

    /**
     * @return Observable List of Statistics generated by Timeline
     */
    Observable<List<StatisticBo>> getStatisticsTimeline();

    /**
     * @return Observable List of Statistics generated by Home Timeline
     */
    Observable<List<StatisticBo>> getStatisticsHomeTimeline();

    /**
     * @return Observable List of Statistics generated by Search
     */
    Observable<List<StatisticBo>> getStatisticsSearch();

    /**
     * @return Observable List of Statistics generated by Hashtag
     */
    Observable<List<StatisticBo>> getStatisticsHashtags();

    /**
     * @param id of the Statistic to be retrieved
     * @return Observable of Statistic requested.
     */
    Observable<StatisticBo> getStatisticById(long id);

    /**
     * @param bo to be saved
     * @return Observable of Void
     */
    Observable<Void> persistStatistic(StatisticBo bo);

}
