// LTI Outcomes reverse the relationship between Tool Consumers and Tool Providers. The Tool
        // Provider becomes a consumer of the Outcomes service hosted by the Tool Consumer. In this
        // sample, the Tool Provider and tell the Tool Consumer to save, read, and delete scores.
        #region LTI 1.1 Outcomes (scores)

        /// <summary>
        /// Display the Basic Outcomes settings and provide buttons to exercise the three actions.
        /// </summary>
        /// <param name="lisOutcomeServiceUrl">The URL to the Outcomes service hosted by the Tool Consumer.</param>
        /// <param name="lisResultSourcedId">The SourcedId of the LisResult used in the demo.</param>
        /// <param name="consumerKey">The OAuth Consumer Key to use when sending requests to the Outcomes Service.</param>
        /// <param name="consumerSecret">The OAuth Consumer Secret to use when sending requests to the Outcomes Service.</param>
        /// <remarks>
        /// The Outcomes service is hosted by the Tool Consumer. The Tool Provider call the Outcomes service.
        /// </remarks>
        public ActionResult BasicOutcomes(string lisOutcomeServiceUrl, string lisResultSourcedId, string consumerKey, string consumerSecret)
        {
            var model = new BasicOutcomeModel
            {
                LisOutcomeServiceUrl = lisOutcomeServiceUrl,
                LisResultSourcedId   = lisResultSourcedId,
                ConsumerKey          = consumerKey,
                ConsumerSecret       = consumerSecret
            };

            return(View(model));
        }
        public ActionResult BasicOutcomes(BasicOutcomeModel model, string submit)
        {
            switch (submit)
            {
            case "Send Grade":
                if (LtiLibrary.Core.Outcomes.v1.OutcomesClient.PostScore(model.LisOutcomeServiceUrl, model.ConsumerKey, model.ConsumerSecret,
                                                                         model.LisResultSourcedId, model.Score))
                {
                    ViewBag.Message = "Grade sent";
                }
                else
                {
                    ViewBag.Message = "Invalid request";
                }
                break;

            case "Read Grade":
                var lisResult = LtiLibrary.Core.Outcomes.v1.OutcomesClient.ReadScore(model.LisOutcomeServiceUrl, model.ConsumerKey,
                                                                                     model.ConsumerSecret, model.LisResultSourcedId);
                if (lisResult.IsValid)
                {
                    model.Score     = lisResult.Score;
                    ViewBag.Message = "Grade read";
                }
                else
                {
                    ViewBag.Message = "No grade";
                }
                break;

            case "Delete Grade":
                if (LtiLibrary.Core.Outcomes.v1.OutcomesClient.DeleteScore(model.LisOutcomeServiceUrl, model.ConsumerKey, model.ConsumerSecret,
                                                                           model.LisResultSourcedId))
                {
                    model.Score     = null;
                    ViewBag.Message = "Grade deleted";
                }
                else
                {
                    ViewBag.Message = "Invalid request";
                }
                break;
            }
            return(View(model));
        }