public IActionResult Calculate(SwimCreate sc)
        {
            bool yards = true;

            string[] poolinfo   = sc.PoolLength.Split(" ");
            int      poolLength = Convert.ToInt32(poolinfo[0]);

            if (poolinfo[1] == "Meters")
            {
                yards = false;
            }
            const string endline = "\r\n";

            sc.Calculated = string.Empty;
            if (yards)
            {
                sc.Calculated = "Total Yards " + sc.TotalYards + endline;
            }
            else
            {
                sc.Calculated = "Total Meters " + sc.TotalMeters + endline;
            }
            sc.Calculated           += "Warm Up" + endline;
            sc.Calculated           += CreateSets(sc, poolLength, endline, WorkoutSection.WarmUp) + endline;
            sc.Calculated           += "Main Set" + endline;
            sc.Calculated           += CreateSets(sc, poolLength, endline, WorkoutSection.Main) + endline;
            sc.Calculated           += "Cool Down" + endline;
            sc.Calculated           += CreateSets(sc, poolLength, endline, WorkoutSection.CoolDown);
            sc.SwimSpeedSelectList   = sc.GetPaceSelectListItems();
            sc.SetDistanceSelectList = sc.GetSetDistanceSelectList();
            sc.Workouts = GetUsersWorkouts();
            model       = sc;
            return(RedirectToAction("Index"));
        }
        // GET: /<controller>/
        public IActionResult Index()
        {
            var tempUserId   = UserId;
            var current_User = userManager.GetUserAsync(HttpContext.User).Result;

            UserId = current_User.Id;

            if (model == null || tempUserId != UserId)
            {
                model = new SwimCreate(5, 10, 5, GetUsersWorkouts());

                model.CoachName = User.Identity.Name;
            }
            return(View(model));
        }
        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);
        }
        public IActionResult LoadWorkout(int id)
        {
            if (string.IsNullOrEmpty(UserId))
            {
                var current_User = userManager.GetUserAsync(HttpContext.User).Result;
                UserId = current_User.Id;
            }

            Workout workout = (from x in context.Workouts
                               where x.UserId == UserId && x.Id == id
                               select x).FirstOrDefault();

            model = new SwimCreate(workout.WarmUpStepCount,
                                   workout.MainStepCount,
                                   workout.CoolDownStepCount,
                                   (from x in context.Workouts
                                    where x.UserId == UserId
                                    select x).ToList());
            model.UserName           = User.Identity.Name;
            model.TotalMeters        = workout.TotalMeters;
            model.TotalYards         = workout.TotalYards;
            model.WorkoutDescription = workout.Description;
            model.AthleteName        = workout.AthleteName;
            model.WorkoutName        = workout.Name;
            model.CoachName          = User.Identity.Name;

            IEnumerable <SwimSet> sets = (from y in context.SwimSets
                                          where y.WorkoutId == workout.Id
                                          select y);

            foreach (SwimSet ss in sets)
            {
                model.SwimSets[ss.StepNumber] = ss;
            }

            model.Workouts  = GetUsersWorkouts();
            model.WorkoutId = workout.Id;
            return(RedirectToAction("Index"));
        }
        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"));
        }