public IMatchProvisioningEngine Create(CompetitionType competitionType)
 {
     if (competitionType.Method == CompetitionMethod.Knockout)
     {
         return Build.New<KnockoutMatchProvisioningEngine>();
     }
     else
     {
         throw new NotImplementedException();
     }
 }
        public MatchHeaderInfo[] BuildMatches(CompetitionType competitionType, CompetitionDetails competitionDetails)
        {
            var helper = new KnockoutMatchProvisioningEngineHelper();
            var pMatches = helper.ProvisionMatches(competitionType.PlayersCount,
                                                  competitionType.QualifyingToFinalPlayersCount,
                                                  competitionDetails.Players.Length);
            var fMatches = pMatches.Where(m => m.SectionCode == "MD").ToArray();
            var qMatches = pMatches.Where(m => m.SectionCode == "Q").ToArray();

            var rankedPlayersCount = competitionType.PlayersCount - competitionType.QualifyingToFinalPlayersCount;
            var qPlayersCount = competitionDetails.Players.Length - rankedPlayersCount;
            if (qPlayersCount <= competitionType.QualifyingToFinalPlayersCount)
            {
                qPlayersCount = 0;
            }
            var matches = new List<MatchHeaderInfo>();
            var finalPlayersCount = PlayersCountCalculator.CalculatePlayersCount(rankedPlayersCount);
            var qualifyingPlayersCount = PlayersCountCalculator.CalculatePlayersCount(qPlayersCount);
            var finalSectionMatches = CreateSectionMatches(finalPlayersCount, CompetitionSection.Final).ToArray();
            var qualifyingSectionMatches = CreateSectionMatches(qualifyingPlayersCount, CompetitionSection.Qualifying, competitionType.QualifyingToFinalPlayersCount).ToArray();
            var consolationSectionMatches = CreateConselationMatches(finalPlayersCount);

            for (var i = 0; i < fMatches.Length; i++)
            {
                finalSectionMatches[i].Player1Code = fMatches[i].Player1Code;
                finalSectionMatches[i].Player2Code = fMatches[i].Player2Code;
            }
            for (var i = 0; i < qMatches.Length; i++)
            {
                qualifyingSectionMatches[i].Player1Code = qMatches[i].Player1Code;
                qualifyingSectionMatches[i].Player2Code = qMatches[i].Player2Code;
            }

            matches.AddRange(qualifyingSectionMatches);
            matches.AddRange(finalSectionMatches);
            matches.AddRange(consolationSectionMatches);
            return matches.ToArray();
        }
 public ActionResult Create()
 {
     var competitionType = new CompetitionType();
     return View(competitionType);
 }
 public ActionResult Create(CompetitionType competitionType)
 {
     var competitionTypesRepository = ServiceProvider.Get<ICompetitionTypeRepository>();
     competitionTypesRepository.Add(competitionType);
     return RedirectToAction("Index");
 }