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);
 }
 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 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();
            }
        }
        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();
            }
        }