package com.integralblue.availability.service;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import com.integralblue.availability.model.Availability;
import com.integralblue.availability.model.Room;
import com.integralblue.availability.model.RoomList;
public interface AvailabilityService {
/**
* @param emailAddress
* @param startDate
* @param endDate
* @return empty optional if the given emailAddress was not found
*/
Optional<Availability> getAvailability(String emailAddress, Date startDate, Date endDate);
/** Get the availability for each provided email address
* @param emailAddresses
* @param startDate
* @param endDate
* @return map of email address to availability. The map's keys will be the same as the provided email addresses
*/
Map<String, Optional<Availability>> getAvailability(List<String> emailAddresses, Date startDate, Date endDate);
/** Get the room lists
* @return
*/
Set<RoomList> getRoomLists();
/** Get the rooms in a room list
* @param roomListEmailAddress
* @return empty optional if the given roomListEmailAddress was not found
*/
Optional<Set<Room>> getRooms(String roomListEmailAddress);
Optional<Map<Room, Optional<Availability>>> getRoomListAvailability(String roomListEmailAddress);
}