public static MainCalculator.TeamStdDevAndAverage CalculateExpectedGoals(MainCalculator.TeamStdDevAndAverage sesonalGoals, MainCalculator.TeamStdDevAndAverage latestGoal,
                                                                                 MainCalculator.TeamStdDevAndAverage seasonalGoalConceded, MainCalculator.TeamStdDevAndAverage latestGoalConceded,
                                                                                 MainCalculator.TeamStdDevAndAverage goalScoredAtHomeOrAway, MainCalculator.TeamStdDevAndAverage goalsConcededAtAwayOrHome)
        {
            var goalScoring  = sesonalGoals.Average * 0.2 + latestGoal.Average * 0.4 + goalScoredAtHomeOrAway.Average * 0.4;
            var goalConceded = seasonalGoalConceded.Average * 0.2 + latestGoalConceded.Average * 0.4 + goalsConcededAtAwayOrHome.Average * 0.4;

            var av  = goalScoring * 0.6 + goalConceded * 0.4;
            var std = (sesonalGoals.StdDev + latestGoal.StdDev + goalScoredAtHomeOrAway.StdDev
                       + seasonalGoalConceded.StdDev + latestGoalConceded.StdDev + goalsConcededAtAwayOrHome.StdDev) / 6;

            return(new MainCalculator.TeamStdDevAndAverage
            {
                Average = av,
                StdDev = std
            });
        }
        public void Build(string homeTeamName, string awayTeamName)
        {
            HomeTeamName = homeTeamName;
            AwayTeamName = awayTeamName;
            using (var db = new sakilaEntities4())
            {
                HomeTeamStats = new TeamReportStats(LettersDict, AttributesDict, CompetitionId, homeTeamName, db, isHomeTeam: true);
                AwayTeamStats = new TeamReportStats(LettersDict, AttributesDict, CompetitionId, awayTeamName, db, isHomeTeam: false);

                HomeExpectedGoals = GoalsCalculator.CalculateExpectedGoals(HomeTeamStats.TeamGoalsStats.TeamSeasonalGoalsScored,
                                                                           HomeTeamStats.TeamGoalsStats.TeamLastGamesGoalsScored, AwayTeamStats.TeamGoalsStats.TeamSeasonalGoalsConceded, AwayTeamStats.TeamGoalsStats.TeamLastGamesGoalsConceded,
                                                                           HomeTeamStats.TeamGoalsStats.TeamHomeOrAwayGoalsScored, AwayTeamStats.TeamGoalsStats.TeamHomeOrAwayGoalsConceded);


                AwayExpectedGoals = GoalsCalculator.CalculateExpectedGoals(AwayTeamStats.TeamGoalsStats.TeamSeasonalGoalsScored,
                                                                           AwayTeamStats.TeamGoalsStats.TeamLastGamesGoalsScored, HomeTeamStats.TeamGoalsStats.TeamSeasonalGoalsConceded, HomeTeamStats.TeamGoalsStats.TeamLastGamesGoalsConceded,
                                                                           AwayTeamStats.TeamGoalsStats.TeamHomeOrAwayGoalsScored, HomeTeamStats.TeamGoalsStats.TeamHomeOrAwayGoalsConceded);
            }
        }
        public TeamGoalsStats(team team, int competitionId, bool isHometeam, sakilaEntities4 db, List <competitionmatch> relevantMatches)
        {
            TeamSeasonalGoalsScored    = GoalsCalculator.GetGoalsScoringAverage(relevantMatches, team.TeamID, competitionId);
            TeamLastGamesGoalsScored   = GoalsCalculator.GetGoalsScoringAverage(relevantMatches, team.TeamID, competitionId, 3);
            TeamSeasonalGoalsConceded  = GoalsCalculator.GetGoalsConcededAverage(relevantMatches, team.TeamID, competitionId);
            TeamLastGamesGoalsConceded = GoalsCalculator.GetGoalsConcededAverage(relevantMatches, team.TeamID, competitionId, 3);

            if (isHometeam)
            {
                TeamHomeOrAwayGoalsScored   = GoalsCalculator.GetGoalsScoringAverageAtHome(relevantMatches, team.TeamID, competitionId);
                TeamHomeOrAwayGoalsConceded = GoalsCalculator.GetGoalsConcededAverageAtHome(relevantMatches, team.TeamID, competitionId);
            }
            else
            {
                TeamHomeOrAwayGoalsScored   = GoalsCalculator.GetGoalsScoringAverageAtAway(relevantMatches, team.TeamID, competitionId);
                TeamHomeOrAwayGoalsConceded = GoalsCalculator.GetGoalsConcededAverageAtAway(relevantMatches, team.TeamID, competitionId);
            }

            TopScorer = GoalsCalculator.GetTeamTopScorer(db, team.TeamID, competitionId);
            GoalsScoreDistribution   = GoalsCalculator.GetTeamScorersByPosition(db, team.TeamID, competitionId);
            GoalsConcedeDistribution = GoalsCalculator.GetTeamScorersAgainstByPosition(db, team.TeamID, competitionId);
        }