/// <summary>
        /// Calculates the cost of the specified optional services.
        /// </summary>
        /// <param name="rentalPeriod">The period of rental.</param>
        /// <param name="unit">The type of unit the customer will be staying in.</param>
        /// <param name="services">The optional services the customer has selected.</param>
        /// <returns>The cost of the optional services in USD.</returns>
        public static decimal OptionalServicesCost(TimeSpan rentalPeriod, RentalUnit unit, OptionalServices services)
        {
            decimal cost = 0;

            // Maid service is $100/day
            if ((services & OptionalServices.Maid) == OptionalServices.Maid)
            {
                cost += 100 * rentalPeriod.Days;
            }

            // The penthouse has 4 bedrooms; the cost is $20/day per bedroom, so we multiply by 4 bedrooms
            // if the penthouse was selected, otherwise just multiply by 1 bedroom
            if ((services & OptionalServices.Linen) == OptionalServices.Linen)
            {
                cost += 20 * rentalPeriod.Days * (unit == RentalUnit.Penthouse ? 4 : 1);
            }

            // Limo service is $75/day
            if ((services & OptionalServices.Limo) == OptionalServices.Limo)
            {
                cost += 75 * rentalPeriod.Days;
            }

            return cost;
        }
        /// <summary>
        /// Calculates the customer's total bill for the rental period with the unit and services selected.
        /// </summary>
        /// <param name="rentalPeriod">The period of rental.</param>
        /// <param name="unit">The type of unit the customer will be staying in.</param>
        /// <param name="services">The optional services the customer has selected.</param>
        /// <returns>The customer's total bill in USD.</returns>
        public static decimal CalculateTotal(TimeSpan rentalPeriod, RentalUnit unit, OptionalServices services)
        {
            // Cost of the unit for the amount of days in the rental period
            decimal totalCost = (RentalCalculator.WeeklyUnitPrice(unit) / 7) * rentalPeriod.Days;

            // If they're renting for 3 months or more, give them a 20% discount
            if (rentalPeriod.Days >= 90)
            {
                totalCost *= 0.8m;
            }

            totalCost += RentalCalculator.OptionalServicesCost(rentalPeriod, unit, services);

            return totalCost * (1 + RentalCalculator.TaxRate);
        }
 /// <summary>
 /// Calculates the cost to rent the specified unit for one week.
 /// </summary>
 /// <param name="unit">The unit to rent.</param>
 public static decimal WeeklyUnitPrice(RentalUnit unit)
 {
     switch (unit)
     {
         case RentalUnit.Studio:
             return 1000;
         case RentalUnit.TwoBedroomSuite:
             return 2000;
         case RentalUnit.ThreeBedroomSuite:
             return 3000;
         case RentalUnit.Penthouse:
             return 15000;
         default:
             return 0;
     }
 }