public async Task<ActionResult> ExchangeCalculate(ExchangeViewModel model)
        {
            var api = GoPlayApi.Instance;
            Game game = api.GetGame(model.gameID).Data;
            var user = api.GetUserById(CurrentUser.Id).Data;

            dynamic exchangeOption = BaseExchangeHandler.retrieveExchangeOption(model.exchangeOption, model.exchangeOptionID);

            BaseExchangeHandlerInterface handler = BaseExchangeHandler.retrieveExchangeHandler(user, game, exchangeOption, model.exchangeAmount, Request.GetClientIp());

            Tuple<decimal, decimal> tuple = await handler.calculate();
            if (!(tuple.Item1 > 0 || tuple.Item2 > 0))
                return null;

            var result = String.Empty;

            if (tuple.Item1 > 0 && tuple.Item2 > 0)
            {
                result = String.Format(Resources.Resources.This_exchange_will_cost_you_Free_Play_Token_and_Play_Token, tuple.Item1, tuple.Item2);
            }
            else if (tuple.Item1 > 0)
            {
                result = String.Format(Resources.Resources.This_exchange_will_cost_you_Free_Play_Token, tuple.Item1);
            }
            else
            {
                result = String.Format(Resources.Resources.This_exchange_will_cost_you_Play_Token, tuple.Item2);
            }

            return Json(new { success = true, msg = result, timespan = TimeHelper.epoch() });
        }
        public async Task<ActionResult> Exchange(ExchangeViewModel model)
        {
            var api = GoPlayApi.Instance;
            Game game = api.GetGame(model.gameID).Data;
            var user = api.GetUserById(CurrentUser.Id).Data;

            dynamic exchangeOption = BaseExchangeHandler.retrieveExchangeOption(model.exchangeOption, model.exchangeOptionID);

            BaseExchangeHandlerInterface handler = BaseExchangeHandler.retrieveExchangeHandler(user, game, exchangeOption, model.exchangeAmount, Request.GetClientIp());
            if (!handler.validate())
            {
                return Json(new { errors = handler.getErrors(), timespan = TimeHelper.epoch() });
            }

            if (!String.IsNullOrEmpty(model.executeExchange))
            {
                if (!handler.exchange().Result)
                {
                    return Json(new { errors = handler.getErrors(), timespan = TimeHelper.epoch() });
                }
                else
                {
                    var message = Resources.Resources.Exchanged_successfully;
                    this.Flash(message, FlashLevel.Success);
                    return Json(new { success = true, message = message });
                }
            }
            return Json(new { success = true, timespan = TimeHelper.epoch() });
        }