package shared.dataInput;
import network.Messages.Enums.RaceTypeEnum;
import shared.model.CompoundMark;
import shared.model.Corner;
import shared.model.GPSCoordinate;
import shared.model.Leg;
import shared.xml.Race.XMLCorner;
import java.time.ZonedDateTime;
import java.util.List;
/**
* An object that holds relevant data for a race.
* Information includes: {@link shared.model.Boat Boat}s,
* {@link shared.model.Leg Leg}s, {@link shared.model.CompoundMark CompoundMark}s and
* the {@link shared.model.GPSCoordinate GPSCoordinate}s.
*/
public interface RaceDataSource {
/**
* Returns the list of sourceIDs for boats competing in the race.
* @return SourceIDs for boats competing in the race.
*/
List getParticipants();
/**
* Returns the list of legs in the race.
* @return The list of legs in the race.
*/
List getLegs();
/**
* Returns the list of corners in the race - two adjacent corners form a leg.
* @return List of corners in race.
*/
List getCorners();
/**
* Returns a list of coordinates representing the boundary of the race.
* @return The boundary of the race.
*/
List getBoundary();
/**
* Returns a list of CompoundMarks in the race.
* @return The sequence of compounds marks in the race.
*/
List getCompoundMarks();
/**
* Returns the ID of the race.
* @return The ID of the race.
*/
int getRaceId();
/**
* Returns the type of race.
* @return The type of race.
*/
RaceTypeEnum getRaceType();
/**
* Returns the start time/date of the race.
* @return The race's start time.
*/
ZonedDateTime getStartDateTime();
/**
* Sets the start time/date of the race.
* @param time Time to start at.
*/
void setStartDateTime(ZonedDateTime time);
/**
* Returns the creation time/date of the race xml file.
* @return The race xml file's creation time.
*/
ZonedDateTime getCreationDateTime();
/**
* Returns whether or not the race has been postponed.
* @return True if the race has been postponed, false otherwise.
*/
boolean getPostponed();
/**
* Returns the GPS coordinate of the top left of the race map area.
* @return Top left GPS coordinate.
*/
GPSCoordinate getMapTopLeft();
/**
* Returns the GPS coordinate of the bottom right of the race map area.
* @return Bottom right GPS coordinate.
*/
GPSCoordinate getMapBottomRight();
/**
* Returns the sequence number associated with this data source. Used to indicate when it has changed.
* @return Sequence number.
*/
int getSequenceNumber();
/**
* Increments the sequence number for this data source. Used to indicate that it has changed.
*/
void incrementSequenceNumber();
}