/// <summary>
        /// Creates a collection of all possible matched due to players in Stripes.
        /// </summary>
        /// <returns>Collection of ordered matches, that contains pleyers` ID</returns>
        private ICollection <dynamic> GenerateMatches()
        {
            dynamic collection;

            using (var db = new TournamentDB())
            {
                Session s = db.Sessions.Find(this.SessionID);
                collection = (db.Stripes.Where(str => str.Session.SessionID == s.SessionID).Select(str => str.Player)).ToList();
            }

            List <dynamic> list = new List <dynamic>();

            for (int i = 1; i < collection.Count; i++)
            {
                for (int j = 0; j < collection.Count; j++)
                {
                    int J = (j + i) % collection.Count;
                    if (J <= j)
                    {
                        continue;
                    }

                    list.Add(new { p1 = collection[j].PlayerID, p2 = collection[J].PlayerID });
                }
            }
            if (list.Count != matchesInTotal(collection.Count))
            {
                throw new Exception("Scedule creation error!");
            }

            return(list);
        }
 internal static void Add(Player p)
 {
     using (var db = new TournamentDB())
     {
         db.Players.Add(p);
         db.SaveChanges();
     }
 }
 internal static int Add(Session s)
 {
     using (var db = new TournamentDB())
     {
         db.Sessions.Add(s);
         db.SaveChanges();
     }
     return(s.SessionID);
 }
        public Session GetSession(int id)
        {
            Session temp = null;

            using (var db = new TournamentDB())
            {
                temp = db.Sessions.Find(id);
            }
            return(temp);
        }
        public ICollection <Player> GetAllPlayers()
        {
            ICollection <Player> temp = null;

            using (var db = new TournamentDB())
            {
                temp = (from p in db.Players
                        select p).ToList();
            }
            return(temp);
        }
 internal static void Add(string nickname)
 {
     using (var db = new TournamentDB())
     {
         db.Players.Add(new Player()
         {
             NickName = nickname
         });
         db.SaveChanges();
     }
 }
 internal void AddPlayer(Player p)
 {
     using (var db = new TournamentDB())
     {
         Session temp = db.Sessions.Find(SessionID);
         temp.Stripes.Add(new Stripe()
         {
             Player = db.Players.Find(p.PlayerID)
         });
         db.SaveChanges();
     }
 }
 internal void AddRangePlayer(IEnumerable <Player> collection)
 {
     using (var db = new TournamentDB())
     {
         foreach (Player p in collection)
         {
             Session temp = db.Sessions.Find(SessionID);
             temp.Stripes.Add(new Stripe()
             {
                 Player = db.Players.Find(p.PlayerID)
             });
         }
         db.SaveChanges();
     }
 }
        internal IEnumerable <Stripe> GetResultTable()
        {
            IEnumerable <Stripe> query;

            using (var db = new TournamentDB())
            {
                Session s = db.Sessions.Find(this.SessionID);

                query = (from str in db.Stripes.Include("Player").Include("Session")
                         where str.Session.SessionID == s.SessionID
                         select str).ToList();
            }

            return(query.OrderByDescending(s => s.Score).ThenByDescending(s => s.GoalDifference).ThenByDescending(s => s.GoalsScored));
        }
        internal static int Add(DateTime date, string description)
        {
            int i = -1;

            using (var db = new TournamentDB())
            {
                db.Sessions.Add(new Session()
                {
                    StartDate = date, Description = description
                });
                db.SaveChanges();
                i = db.Sessions.ToList().Last().SessionID;
            }

            return(i);
        }
        internal void GenerateMatchTable()
        {
            using (var db = new TournamentDB())
            {
                foreach (dynamic item in GenerateMatches())
                {
                    Session temp = db.Sessions.Find(this.SessionID);
                    temp.Matches.Add(new Match()
                    {
                        Player1 = db.Players.Find(item.p1),
                        Player2 = db.Players.Find(item.p2)
                    });
                }

                db.SaveChanges();
            }
        }
        private void UpdateData()
        {
            using (var db = new TournamentDB())
            {
                Player temp = db.Players.Find(this.PlayerID);

                var query = from stripe in db.Stripes
                            where stripe.Player.PlayerID == temp.PlayerID
                            select stripe;


                temp.TotalMatchesPlayed = query.Sum(s => s.GamesPlayed);
                temp.WinCount           = query.Sum(s => s.Wins);
                temp.TotalGoalScored    = query.Sum(s => s.GoalsScored);

                db.SaveChanges();
            }
        }
        public Match NextMatch(Session s)
        {
            int?m = s.NextMatch();

            if (m == null)
            {
                return(null);
            }

            Match match = null;

            using (var db = new TournamentDB())
            {
                match = (from ma in db.Matches.Include("Player1").Include("Player2")
                         where ma.MatchID == (int)m
                         select ma).First();
            }
            return(match);
        }
        internal int?NextMatch()
        {
            int?temp = null;

            using (var db = new TournamentDB())
            {
                Session s = db.Sessions.Find(this.SessionID);

                var query = db.Matches.Where(m => m.Session.SessionID == s.SessionID).Where(m => m.IsFinished == false);

                if (query.Count() != 0)
                {
                    temp = query.First().MatchID;
                }
                else
                {
                    s.IsFinished = true;
                    db.SaveChanges();
                }
            }

            return(temp);
        }
        internal static void MatchFinished(int matchId, int g1, int g2)
        {
            using (var db = new TournamentDB())
            {
                var   coll = db.Matches.ToList();
                Match m    = db.Matches.Find(matchId);
                m.P1Scored   = g1;
                m.P2Scored   = g2;
                m.IsFinished = true;

                Session temp = db.Matches.Where(mat => mat.MatchID == m.MatchID)
                               .Select(mat => mat.Session)
                               .First();

                Player p1 = db.Matches.Where(mat => mat.MatchID == m.MatchID)
                            .Select(mat => mat.Player1)
                            .First();
                Player p2 = db.Matches.Where(mat => mat.MatchID == m.MatchID)
                            .Select(mat => mat.Player2)
                            .First();

                Stripe s1 = (from s in db.Stripes
                             where s.Session.SessionID == m.Session.SessionID
                             where s.Player.PlayerID == p1.PlayerID
                             select s).First();

                Stripe s2 = (from s in db.Stripes
                             where s.Session.SessionID == m.Session.SessionID
                             where s.Player.PlayerID == p2.PlayerID
                             select s).First();

                if (s1 == null | s2 == null)
                {
                    throw new Exception("stripe is null");                          //TO DELETE
                }
                if (g1 > g2)
                {
                    s1.Wins++;
                    s2.Loses++;
                }
                else if (g1 < g2)
                {
                    s1.Loses++;
                    s2.Wins++;
                }
                else
                {
                    s1.Draws++;
                    s2.Draws++;
                }

                s1.GamesPlayed++;
                s2.GamesPlayed++;

                s1.GoalsScored += g1;
                s1.GoalsMissed += g2;
                s2.GoalsScored += g2;
                s2.GoalsMissed += g1;

                db.SaveChanges();

                p1.UpdateDataAsync();
                p2.UpdateDataAsync();
            }
        }