package cgeo.geocaching.connector;
import cgeo.geocaching.location.Geopoint;
import cgeo.geocaching.log.LogCacheActivity;
import cgeo.geocaching.log.LogType;
import cgeo.geocaching.models.Geocache;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import java.util.Collection;
import java.util.List;
import java.util.Set;
public interface IConnector {
/**
* get name for display (currently only used in links)
*
*/
@NonNull
String getName();
/**
* Check if this connector is responsible for the given geocode.
*
* @param geocode
* geocode of a cache
* @return return {@code true}, if this connector is responsible for the cache
*/
boolean canHandle(@NonNull final String geocode);
/**
* Return a new geocodes list, with only geocodes for which this connector is responsible.
*
* @param geocodes
* list of geocodes of a cache
* @return return a new stripped list
*/
Set<String> handledGeocodes(@NonNull final Set<String> geocodes);
/**
* Get the browser URL for the given cache.
*
*/
@Nullable
String getCacheUrl(@NonNull final Geocache cache);
/**
* get long browser URL for the given cache
*
*/
@Nullable
String getLongCacheUrl(@NonNull final Geocache cache);
/**
* enable/disable favorite points controls in cache details
*
*/
boolean supportsFavoritePoints(@NonNull final Geocache cache);
/**
* enable/disable logging controls in cache details
*
*/
boolean supportsLogging();
/**
* enable/disable attaching image to log
*
*/
boolean supportsLogImages();
/**
* Get an ILoggingManager to guide the logging process.
*
*/
@NonNull
ILoggingManager getLoggingManager(@NonNull final LogCacheActivity activity, @NonNull final Geocache cache);
/**
* Get host name of the connector server for dynamic loading of data.
*
*/
@NonNull
String getHost();
/**
* Return <tt>true<tt> if https must be used.
*/
boolean getHttps();
/**
* Get url of the connector server for dynamic loading of data.
*
* @return the host prepended with "https://" or "http://" unless the host is blank, in which case the empty string is returned
*/
@NonNull
String getHostUrl();
/**
* Get url to use when testing website availability (because host url may redirect)
*
*/
@NonNull
String getTestUrl();
/**
* Get cache data license text. This is displayed somewhere near the cache details.
*
*/
@NonNull
String getLicenseText(@NonNull final Geocache cache);
/**
* return true if this is a ZIP file containing a GPX file
*
*/
boolean isZippedGPXFile(@NonNull final String fileName);
/**
* return true if coordinates of a cache are reliable. only implemented by GC connector
*
* @param cacheHasReliableLatLon
* flag of the cache
*/
boolean isReliableLatLon(boolean cacheHasReliableLatLon);
/**
* extract a geocode from the given URL, if this connector can handle that URL somehow
*
*/
@Nullable
String getGeocodeFromUrl(@NonNull final String url);
/**
* enable/disable uploading modified coordinates to website
*
* @return true, when uploading is possible
*/
boolean supportsOwnCoordinates();
/**
* Resetting of modified coordinates on website to details
*
* @return success
*/
boolean deleteModifiedCoordinates(@NonNull Geocache cache);
/**
* Uploading modified coordinates to website
*
* @return success
*/
boolean uploadModifiedCoordinates(@NonNull Geocache cache, @NonNull Geopoint wpt);
/**
* Return {@code true} if this connector is active for online interaction (download details, do searches, ...). If
* this is {@code false}, the connector will still be used for already stored offline caches.
*
*/
boolean isActive();
/**
* Check if the current user is the owner of the given cache.
*
* @param cache a cache that this connector must be able to handle
* @return {@code true} if the current user is the cache owner, {@code false} otherwise
*/
boolean isOwner(@NonNull final Geocache cache);
/**
* Check if the cache information is complete enough to be
* able to log online.
*
*/
boolean canLog(@NonNull Geocache geocache);
/**
* Return the marker id of the caches for this connector. This creates the different backgrounds for cache markers
* on the map.
*
* @param disabled
* Whether to return the enabled or disabled marker type
*/
int getCacheMapMarkerId(boolean disabled);
/**
* Get the list of <b>potentially</b> possible log types for a cache. Those may still be filtered further during the
* actual logging activity.
*
*/
@NonNull
List<LogType> getPossibleLogTypes(@NonNull Geocache geocache);
/**
* Get the GPX id for a waypoint when exporting. For some connectors there is an inherent name logic,
* for others its just the 'prefix'.
*
*/
String getWaypointGpxId(String prefix, @NonNull String geocode);
/**
* Get the 'prefix' (key) for a waypoint from the 'name' in the GPX file
*
*/
@NonNull
String getWaypointPrefix(String name);
/**
* Get the maximum value for Terrain
*
*/
int getMaxTerrain();
/**
* Get a user readable collection of all online features of this connector.
*
*/
@NonNull
Collection<String> getCapabilities();
@NonNull
List<UserAction> getUserActions();
/**
* Check cache is eligible for adding to favorite
*
* @param cache
* a cache that this connector must be able to handle
* @param type
* a log type selected by the user
* @return true, when cache can be added to favorite
*/
boolean supportsAddToFavorite(final Geocache cache, final LogType type);
/**
* @return the URL to register a new account or {@code null}
*/
@Nullable
String getCreateAccountUrl();
/**
* abbreviation of the connector name for shorter display, e.g. for main page login status
*/
@NonNull
String getNameAbbreviated();
}