package simulator;

/*
 * Logger.java
 * Created on 2005/1/6
 *
 */


/**
 *  Logger - This interface defines the function that can be used to log
 *  specific events in the amusement park, specifically when a customer arrives at, boards,
 *  and leaves a particular attraction.
 *  @author Ping
 *
 */
public interface Logger
{
    
    /**
     * This function should be called when the park first opens and pass in the time
     * that the park opened at.  This function should be called before the other function
     * can be called.
     * 
     * @param time - The current time
     */
    public void parkOpened(Time time);
    
    /**
     * This function should be called when the park closes.  No more logging functions
     * can be called until the park is openned again
     *
     */
    public void parkClosed();
    
    /**
     * This function logs the event of a customer arriving at a particular attraction
     * @param customer - The arriving customer
     * @param attraction - The attraction that the customer arrived at
     */
    public void arriveAtAttraction(Customer customer, Attraction attraction);
    
    /**
     * This function logs the event of a customer actually getting on a 
     * particular attraction
     * @param customer - The customer
     * @param attraction - The attraction that the customer boarded
     */
    public void boardAttraction(Customer customer, Attraction attraction);
    
    /**
     * This function logs the event of a customer exiting an attraction 
     * 
     * @param customer - The exiting customer
     * @param attraction - The attraction that the customer exited from
     */
    public void exitAttraction(Customer customer, Attraction attraction);
    
    /**
     * This function logs the customer's decision on where to go next.
     * 
     * @param customer - The customer who has just decided where to go
     * @param nextStop - The next attraction that the customer decides to go to.  Note
     *  this should be null if the customer is heading to the exit.
     */
    public void nextAttraction(Customer customer, Attraction nextStop);
}
