public async Task <List <JobOverviewViewModel> > GetJobSelectionDataAsync(int genderID)
        {
            List <JobOverviewViewModel> viewModels;
            JobOverviewRangeViewModel   rangeViewModel;
            string genderName = Enum.GetName(typeof(Enums.Gender), genderID);

            using (FFTContext context = new FFTContext())
            {
                viewModels = await context.Jobs.Where(m => genderID == 0? !m.IsFemaleOnly : !m.IsMaleOnly).Select(m => new JobOverviewViewModel
                {
                    JobID                             = m.JobId,
                    FileName                          = (m.PspName.Contains("(") ? m.PspName.Remove(m.PspName.IndexOf("(")) : m.PspName).Replace(" ", ""),
                    DisplayName                       = m.PspName,
                    GenderID                          = genderID,
                    Gender                            = genderName,
                    HPMultiplier                      = m.HPMultiplier,
                    HPGrowthConstant                  = m.HPGrowthConstant,
                    HPGrowthConstantLabel             = m.HPGrowthConstant,
                    MPMultiplier                      = m.MPMultiplier,
                    MPGrowthConstant                  = m.MPGrowthConstant,
                    MPGrowthConstantLabel             = m.MPGrowthConstant,
                    SpeedMulitplier                   = m.SpeedMulitplier,
                    SpeedGrowthConstant               = m.SpeedGrowthConstant,
                    SpeedGrowthConstantLabel          = m.SpeedGrowthConstant,
                    PhysicalAttackMultiplier          = m.PhysicalAttackMultiplier,
                    PhysicalAttackGrowthConstant      = m.PhysicalAttackGrowthConstant,
                    PhysicalAttackGrowthConstantLabel = m.PhysicalAttackGrowthConstant,
                    MagicalAttackMultiplier           = m.MagicalAttackMultiplier,
                    MagicalAttackGrowthConstant       = m.MagicalAttackGrowthConstant,
                    MagicalAttackGrowthConstantLabel  = m.MagicalAttackGrowthConstant,
                    BaseMoveLength                    = m.BaseMoveLength,
                    BaseJumpHeight                    = m.BaseJumpHeight,
                    BaseCombatEvasion                 = m.BaseCombatEvasion
                }).ToListAsync();

                rangeViewModel = new JobOverviewRangeViewModel
                {
                    HPGrowthConstantMax             = context.Jobs.Max(c => c.HPGrowthConstant),
                    HPGrowthConstantMin             = context.Jobs.Min(c => c.HPGrowthConstant),
                    MPGrowthConstantMax             = context.Jobs.Max(c => c.MPGrowthConstant),
                    MPGrowthConstantMin             = context.Jobs.Min(c => c.MPGrowthConstant),
                    SpeedGrowthConstantMax          = context.Jobs.Max(c => c.SpeedGrowthConstant),
                    SpeedGrowthConstantMin          = context.Jobs.Min(c => c.SpeedGrowthConstant),
                    PhysicalAttackGrowthConstantMax = context.Jobs.Max(c => c.PhysicalAttackGrowthConstant),
                    PhysicalAttackGrowthConstantMin = context.Jobs.Min(c => c.PhysicalAttackGrowthConstant),
                    MagicalAttackGrowthConstantMax  = context.Jobs.Max(c => c.MagicalAttackGrowthConstant),
                    MagicalAttackGrowthConstantMin  = context.Jobs.Min(c => c.MagicalAttackGrowthConstant)
                };

                int commonDenominator = (new int[] { rangeViewModel.HPGrowthConstantMax, rangeViewModel.MPGrowthConstantMax, rangeViewModel.SpeedGrowthConstantMax,
                                                     rangeViewModel.PhysicalAttackGrowthConstantMax, rangeViewModel.MagicalAttackGrowthConstantMax }).Max();
                rangeViewModel.HPGrowthConstantMultiplier             = (float)commonDenominator / (float)rangeViewModel.HPGrowthConstantMax;
                rangeViewModel.MPGrowthConstantMultiplier             = (float)commonDenominator / (float)rangeViewModel.MPGrowthConstantMax;
                rangeViewModel.SpeedGrowthConstantMultiplier          = (float)commonDenominator / (float)rangeViewModel.SpeedGrowthConstantMax;
                rangeViewModel.PhysicalAttackGrowthConstantMultiplier = (float)commonDenominator / (float)rangeViewModel.PhysicalAttackGrowthConstantMax;
                rangeViewModel.MagicalAttackGrowthConstantMultiplier  = (float)commonDenominator / (float)rangeViewModel.MagicalAttackGrowthConstantMax;

                foreach (JobOverviewViewModel viewModel in viewModels)
                {
                    viewModel.HPGrowthConstant = (int)((rangeViewModel.HPGrowthConstantMax + rangeViewModel.HPGrowthConstantMin - viewModel.HPGrowthConstant) *
                                                       rangeViewModel.HPGrowthConstantMultiplier);
                    viewModel.MPGrowthConstant = (int)((rangeViewModel.MPGrowthConstantMax + rangeViewModel.MPGrowthConstantMin - viewModel.MPGrowthConstant) *
                                                       rangeViewModel.MPGrowthConstantMultiplier);
                    viewModel.SpeedGrowthConstant = (int)((rangeViewModel.SpeedGrowthConstantMax + rangeViewModel.SpeedGrowthConstantMin - viewModel.SpeedGrowthConstant) *
                                                          rangeViewModel.SpeedGrowthConstantMultiplier);
                    viewModel.PhysicalAttackGrowthConstant = (int)((rangeViewModel.PhysicalAttackGrowthConstantMax + rangeViewModel.PhysicalAttackGrowthConstantMin -
                                                                    viewModel.PhysicalAttackGrowthConstant) * rangeViewModel.PhysicalAttackGrowthConstantMultiplier);
                    viewModel.MagicalAttackGrowthConstant = (int)((rangeViewModel.MagicalAttackGrowthConstantMax + rangeViewModel.MagicalAttackGrowthConstantMin -
                                                                   viewModel.MagicalAttackGrowthConstant) * rangeViewModel.MagicalAttackGrowthConstantMultiplier);
                }
            }

            return(viewModels);
        }
        public ActionResult GetJobSelectionPartial(string gender)
        {
            List <JobOverviewViewModel> viewModels;
            JobOverviewRangeViewModel   rangeViewModel;

            using (FFTContext context = new FFTContext())
            {
                viewModels = context.Jobs.Where(m => gender == "Male" ? !m.IsFemaleOnly : !m.IsMaleOnly).Select(m => new JobOverviewViewModel
                {
                    JobID                             = m.JobID,
                    FileName                          = (m.PspName.Contains("(") ? m.PspName.Remove(m.PspName.IndexOf("(")) : m.PspName).Replace(" ", ""),
                    DisplayName                       = m.PspName,
                    GenderID                          = gender == "Male" ? 0 : 1,
                    Gender                            = gender,
                    HPMultiplier                      = m.HPMultiplier,
                    HPGrowthConstant                  = m.HPGrowthConstant,
                    HPGrowthConstantLabel             = m.HPGrowthConstant,
                    MPMultiplier                      = m.MPMultiplier,
                    MPGrowthConstant                  = m.MPGrowthConstant,
                    MPGrowthConstantLabel             = m.MPGrowthConstant,
                    SpeedMulitplier                   = m.SpeedMulitplier,
                    SpeedGrowthConstant               = m.SpeedGrowthConstant,
                    SpeedGrowthConstantLabel          = m.SpeedGrowthConstant,
                    PhysicalAttackMultiplier          = m.PhysicalAttackMultiplier,
                    PhysicalAttackGrowthConstant      = m.PhysicalAttackGrowthConstant,
                    PhysicalAttackGrowthConstantLabel = m.PhysicalAttackGrowthConstant,
                    MagicalAttackMultiplier           = m.MagicalAttackMultiplier,
                    MagicalAttackGrowthConstant       = m.MagicalAttackGrowthConstant,
                    MagicalAttackGrowthConstantLabel  = m.MagicalAttackGrowthConstant,
                    BaseMoveLength                    = m.BaseMoveLength,
                    BaseJumpHeight                    = m.BaseJumpHeight,
                    BaseCombatEvasion                 = m.BaseCombatEvasion
                }).ToList();

                rangeViewModel = new JobOverviewRangeViewModel
                {
                    HPGrowthConstantMax             = context.Jobs.Max(c => c.HPGrowthConstant),
                    HPGrowthConstantMin             = context.Jobs.Min(c => c.HPGrowthConstant),
                    MPGrowthConstantMax             = context.Jobs.Max(c => c.MPGrowthConstant),
                    MPGrowthConstantMin             = context.Jobs.Min(c => c.MPGrowthConstant),
                    SpeedGrowthConstantMax          = context.Jobs.Max(c => c.SpeedGrowthConstant),
                    SpeedGrowthConstantMin          = context.Jobs.Min(c => c.SpeedGrowthConstant),
                    PhysicalAttackGrowthConstantMax = context.Jobs.Max(c => c.PhysicalAttackGrowthConstant),
                    PhysicalAttackGrowthConstantMin = context.Jobs.Min(c => c.PhysicalAttackGrowthConstant),
                    MagicalAttackGrowthConstantMax  = context.Jobs.Max(c => c.MagicalAttackGrowthConstant),
                    MagicalAttackGrowthConstantMin  = context.Jobs.Min(c => c.MagicalAttackGrowthConstant)
                };

                int commonDenominator = (new int[] { rangeViewModel.HPGrowthConstantMax, rangeViewModel.MPGrowthConstantMax, rangeViewModel.SpeedGrowthConstantMax,
                                                     rangeViewModel.PhysicalAttackGrowthConstantMax, rangeViewModel.MagicalAttackGrowthConstantMax }).Max();
                rangeViewModel.HPGrowthConstantMultiplier             = (float)commonDenominator / (float)rangeViewModel.HPGrowthConstantMax;
                rangeViewModel.MPGrowthConstantMultiplier             = (float)commonDenominator / (float)rangeViewModel.MPGrowthConstantMax;
                rangeViewModel.SpeedGrowthConstantMultiplier          = (float)commonDenominator / (float)rangeViewModel.SpeedGrowthConstantMax;
                rangeViewModel.PhysicalAttackGrowthConstantMultiplier = (float)commonDenominator / (float)rangeViewModel.PhysicalAttackGrowthConstantMax;
                rangeViewModel.MagicalAttackGrowthConstantMultiplier  = (float)commonDenominator / (float)rangeViewModel.MagicalAttackGrowthConstantMax;

                foreach (JobOverviewViewModel viewModel in viewModels)
                {
                    viewModel.HPGrowthConstant = (int)((rangeViewModel.HPGrowthConstantMax + rangeViewModel.HPGrowthConstantMin - viewModel.HPGrowthConstant) *
                                                       rangeViewModel.HPGrowthConstantMultiplier);
                    viewModel.MPGrowthConstant = (int)((rangeViewModel.MPGrowthConstantMax + rangeViewModel.MPGrowthConstantMin - viewModel.MPGrowthConstant) *
                                                       rangeViewModel.MPGrowthConstantMultiplier);
                    viewModel.SpeedGrowthConstant = (int)((rangeViewModel.SpeedGrowthConstantMax + rangeViewModel.SpeedGrowthConstantMin - viewModel.SpeedGrowthConstant) *
                                                          rangeViewModel.SpeedGrowthConstantMultiplier);
                    viewModel.PhysicalAttackGrowthConstant = (int)((rangeViewModel.PhysicalAttackGrowthConstantMax + rangeViewModel.PhysicalAttackGrowthConstantMin -
                                                                    viewModel.PhysicalAttackGrowthConstant) * rangeViewModel.PhysicalAttackGrowthConstantMultiplier);
                    viewModel.MagicalAttackGrowthConstant = (int)((rangeViewModel.MagicalAttackGrowthConstantMax + rangeViewModel.MagicalAttackGrowthConstantMin -
                                                                   viewModel.MagicalAttackGrowthConstant) * rangeViewModel.MagicalAttackGrowthConstantMultiplier);
                }
            }

            return(PartialView("~/Views/Home/_JobSelectionPartial.cshtml", viewModels));
        }