/// <summary>
        /// Allows cars to leave the parking
        /// </summary>
        /// <param name="ticket">Ticket to calculate the parking charges</param>
        /// <param name="leavingDate">Date leaving the car park</param>
        /// <returns>Parking charge</returns>
        public double Leave(IParkingTicket ticket, DateTime leavingDate)
        {
            if (!parkingTickets.TryGetValue(ticket, out IParkingChargeCalculator chargeCalculator))
            {
                throw new InvalidOperationException("Invalid ticket");
            }

            parkingTickets.Remove(ticket);
            return(chargeCalculator.CalculateParkingCharge(leavingDate));
        }
 /// <summary>
 /// Allows cars to leave the parking
 /// </summary>
 /// <param name="ticket">Ticket to calculate the parking charges</param>
 /// <returns>Parking charge</returns>
 public double Leave(IParkingTicket ticket) => Leave(ticket, DateTime.Now);