class BookingService {

    public Reservation bookRoom(String guestId, String roomId, LocalDate checkin, LocalDate checkout) {
        Reservation reservation =
                new Reservation(guestId, newReservationNumber(), roomId,
                        checkin, checkout, reservationCostCalculator.calculateRateFor(BUDGET, checkin, checkout));

        LOGGER.info(() -> "Storing " + reservation);
        this.em.persist(reservation);

        this.reservationEvents.fire(new NewReservationEvent(reservation.getReservationNumber()));

        this.em.flush();
        return reservation;
    }

    public  BookingService();
    @Inject public  BookingService(Event<NewReservationEvent> reservationEvents, Event<ReservationStatusChangeEvent> reservationStateChangeEvents, ReservationCostCalculator reservationCostCalculator);

}