package com.schneeloch.bostonbusmap_library.provider;
import android.os.RemoteException;
import com.google.common.collect.ImmutableList;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CopyOnWriteArraySet;
import com.schneeloch.bostonbusmap_library.data.Direction;
import com.schneeloch.bostonbusmap_library.data.Favorite;
import com.schneeloch.bostonbusmap_library.data.IntersectionLocation;
import com.schneeloch.bostonbusmap_library.data.RouteConfig;
import com.schneeloch.bostonbusmap_library.data.RouteTitles;
import com.schneeloch.bostonbusmap_library.data.StopLocation;
import com.schneeloch.bostonbusmap_library.data.TransitSourceTitles;
import com.schneeloch.bostonbusmap_library.transit.ITransitSystem;
/**
* Created by schneg on 1/2/15.
*/
public interface IDatabaseAgent {
void populateFavorites(CopyOnWriteArraySet<String> favorites);
ImmutableList<String> getAllStopTagsAtLocation(String stopTag);
void saveFavorite(Collection<String> allStopTagsAtLocation, Favorite isFavorite) throws RemoteException;
RouteConfig getRoute(String routeToUpdate,
ConcurrentMap<String, StopLocation> sharedStops,
ITransitSystem transitSystem) throws IOException;
void refreshDirections(ConcurrentHashMap<String, Direction> directions);
Collection<StopLocation> getClosestStopsAndFilterRoutes(double currentLat, double currentLon, ITransitSystem transitSystem,
ConcurrentMap<String, StopLocation> sharedStops, int limit, Set<String> routes);
Collection<StopLocation> getClosestStops(double currentLat, double currentLon, ITransitSystem transitSystem,
ConcurrentMap<String, StopLocation> sharedStops, int limit);
StopLocation getStopByTagOrTitle(String tagQuery, String titleQuery, ITransitSystem transitSystem);
void getStops(ImmutableList<String> stopTags,
ITransitSystem transitSystem, ConcurrentMap<String, StopLocation> outputMapping);
ArrayList<String> getDirectionTagsForStop(String stopTag);
List<String> getStopTagsForDirTag(String dirTag);
void populateIntersections(
ConcurrentMap<String, IntersectionLocation> intersections,
ITransitSystem transitSystem, ConcurrentMap<String, StopLocation> sharedStops,
float miles, boolean filterByDistance);
void replaceStops(Collection<StopLocation> stops);
boolean addIntersection(IntersectionLocation.Builder build, TransitSourceTitles routeTitles);
RouteTitles getRouteTitles();
void removeIntersection(String name);
void editIntersectionName(
String oldName, String newName);
}