/// <summary>
        /// Accepts a model of cabfare and calculates total fare.
        /// </summary>
        /// <param name="model">CabFareModel of the paramstring from HTTP</param>
        /// <returns>object of the total cabfare along with other info.</returns>
        public CabFareModel GetTotalFare(CabFareModel model)
        {
            //setup, get hour and day
            //int currentHour = (new DateTime(model.timeOfTrip)).Hour;
            //DayOfWeek currentDay = (new DateTime(model.dateOfTrip)).DayOfWeek;
            int       currentHour  = model.timeOfTrip.Hour;
            DayOfWeek currentDay   = model.dateOfTrip.DayOfWeek;
            double    nysSurcharge = (double)0.50;

            //mile unit = 1/5 of a mile, so it's a simple 5*numMiles
            double mileUnit = 5.0 * model.numMilesBelow6mph;

            //minute unit
            double minuteUnit = Math.Ceiling((double)model.numMinutesAbove6mph);

            //entry fee + 0.35/unit etc..
            double entryFee      = (double)3.0;
            double totalUnitsFee = (double)0.35 * (mileUnit + minuteUnit);
            double nightCharge   = 0;
            int    weekDayCharge = 0;

            //night charge: if the ride took place after 8PM or before 6AM
            if (currentHour >= 20 || currentHour < 6)
            {
                nightCharge = (double)0.50 * (mileUnit + minuteUnit);
            }
            //weekday rush hour charge
            if ((currentDay >= DayOfWeek.Monday && currentDay <= DayOfWeek.Friday) &&
                (currentHour >= 16 && currentHour < 21))
            {
                weekDayCharge = 1;
            }

            //make a new model and return it
            CabFareModel result = new CabFareModel()
            {
                numMilesBelow6mph   = model.numMilesBelow6mph,
                numMinutesAbove6mph = model.numMinutesAbove6mph,
                dateOfTrip          = model.dateOfTrip,
                timeOfTrip          = model.timeOfTrip,
                mileUnit            = mileUnit,
                minuteUnit          = minuteUnit,
                nightCharge         = nightCharge,
                weekDayCharge       = weekDayCharge,
                totalUnitsFee       = totalUnitsFee,
                totalFare           = entryFee + totalUnitsFee + nightCharge + weekDayCharge + nysSurcharge
            };

            return(result);
        }
        public ActionResult Index(CabFareModel model)
        {
            if (model == null)
            {
                Response.StatusCode        = 500;
                Response.StatusDescription = "Bad Request";
                return(Json("Bad request"));
            }

            //call the calculate service, now hidden behind the abstraction
            var result = _service.GetTotalFare(model);

            return(Json(result, JsonRequestBehavior.AllowGet));
        }