public IActionResult Save(SwimCreate sc)
        {
            if (string.IsNullOrEmpty(UserId))
            {
                var current_User = userManager.GetUserAsync(HttpContext.User).Result;
                UserId = current_User.Id;
            }

            Workout wo = (from x in context.Workouts
                          where x.UserId == UserId && x.Name == sc.WorkoutName
                          select x).SingleOrDefault();// FirstOrDefault();

            //wo = context.Workouts.SingleOrDefault(b => b.UserId == UserId && b.Name == sc.WorkoutName);

            if (wo == null)
            {
                wo = new Workout
                {
                    AthleteName       = sc.AthleteName,
                    CoolDownStepCount = sc.CoolDownEndSteps - sc.CoolDownBeginSteps,
                    WarmUpStepCount   = sc.WarmUpEndSteps - sc.WarmUpBeginSteps,
                    MainStepCount     = sc.MainEndSteps - sc.MainBeginSteps,
                    Description       = sc.WorkoutDescription,
                    Name        = sc.WorkoutName,
                    UserId      = UserId,
                    TotalYards  = sc.TotalYards,
                    TotalMeters = sc.TotalMeters
                };

                context.Workouts.Add(wo);

                //Save changes to get a valid wo.Id.
                context.SaveChanges();
            }
            else
            {
                wo.AthleteName       = sc.AthleteName;
                wo.CoolDownStepCount = sc.CoolDownEndSteps - sc.CoolDownBeginSteps;
                wo.WarmUpStepCount   = sc.WarmUpEndSteps - sc.WarmUpBeginSteps;
                wo.MainStepCount     = sc.MainEndSteps - sc.MainBeginSteps;
                wo.Description       = sc.WorkoutDescription;
                wo.Name        = sc.WorkoutName;
                wo.UserId      = UserId;
                wo.TotalYards  = sc.TotalYards;
                wo.TotalMeters = sc.TotalMeters;
            }

            for (int i = 0; i < sc.SwimSets.Count; i++)
            {
                if (sc.SwimSets[i].RepCount > 0)
                {
                    WorkoutSection wos = WorkoutSection.CoolDown;
                    if (sc.SwimSets[i].StepNumber < wo.WarmUpStepCount)
                    {
                        wos = WorkoutSection.WarmUp;
                    }
                    else if (sc.SwimSets[i].StepNumber < (wo.MainStepCount + wo.WarmUpStepCount))
                    {
                        wos = WorkoutSection.Main;
                    }

                    SwimSet ss = (from x in context.SwimSets
                                  where x.WorkoutId == wo.Id && x.StepNumber == sc.SwimSets[i].StepNumber
                                  select x).FirstOrDefault();

                    SwimSet ssNew = new SwimSet
                    {
                        Comment    = sc.SwimSets[i].Comment,
                        Distance   = sc.SwimSets[i].Distance,
                        RepCount   = sc.SwimSets[i].RepCount,
                        Speed      = sc.SwimSets[i].Speed,
                        Rest       = sc.SwimSets[i].Rest,
                        StepNumber = i,
                        Total      = sc.SwimSets[i].Total,
                        WorkoutId  = wo.Id,
                        Group      = wos
                    };

                    if (ss != null)
                    {
                        ss = ssNew;
                    }
                    else
                    {
                        context.SwimSets.Add(ssNew);
                    }
                }
            }

            context.SaveChanges();

            sc.SwimSpeedSelectList   = sc.GetPaceSelectListItems();
            sc.SetDistanceSelectList = sc.GetSetDistanceSelectList();
            sc.Workouts  = GetUsersWorkouts();
            sc.WorkoutId = wo.Id;
            model        = sc;
            return(RedirectToAction("Index"));
        }
        private static string CreateSets(SwimCreate sc, int poolLength, string endline, WorkoutSection section)
        {
            string retString = string.Empty;
            int    beginStep = 0, endStep = 0;

            switch (section)
            {
            case WorkoutSection.WarmUp:
                beginStep = sc.WarmUpBeginSteps;
                endStep   = sc.WarmUpEndSteps;
                break;

            case WorkoutSection.Main:
                beginStep = sc.MainBeginSteps;
                endStep   = sc.MainEndSteps;
                break;

            case WorkoutSection.CoolDown:
                beginStep = sc.CoolDownBeginSteps;
                endStep   = sc.CoolDownEndSteps;
                break;
            }

            for (int i = beginStep; i < endStep; i++)
            {
                if (sc.SwimSets[i].RepCount > 0)
                {
                    string format = string.Empty;
                    if (sc.SwimSets[i].RepCount > 1)
                    {
                        format = "{0} x {1} @{2} {3}s {4}";
                    }
                    else
                    {
                        format = "{1} @{2} {3}s {4}";
                    }

                    retString += string.Format(format,
                                               sc.SwimSets[i].RepCount,
                                               sc.SwimSets[i].Distance,
                                               sc.SwimSets[i].Speed[0],
                                               sc.SwimSets[i].Rest,
                                               sc.SwimSets[i].Comment) + endline;
                }
            }

            return(retString);
        }