public string getThemeFavori(int id)
        {
            context = new fmnContext();
            string        th     = "aucun pour le moment";
            List <string> themes = new List <string>();

            IEnumerable <Partie> parties = context.parties
                                           .Include(p => p.Manches)
                                           .ThenInclude((Manche m) => m.theme)
                                           .Include(p => p.j1)
                                           .Include(p => p.j2)
                                           .Where(p => (p.j1.id == id || p.j2.id == id))
                                           .ToList();

            foreach (var partie in parties)
            {
                foreach (var manche in partie.Manches)
                {
                    themes.Add(manche.theme.text);
                }
            }


            if (themes.Count() != 0)
            {
                var resultat = themes
                               .GroupBy(val => val)
                               .OrderByDescending(grp => grp.Count())
                               .ThenBy(grp => grp.Key);
                th = resultat.First().Key;
            }
            return(th);
        }
        public string Same_mdp(int id, string password)
        {
            IList <Utilisateur> AllUtilisateurs = new List <Utilisateur> {
            };

            AllUtilisateurs = ALL();
            String r = "";

            for (var i = 0; i < AllUtilisateurs.Count; i++)
            {
                if (AllUtilisateurs[i].id == id)
                {
                    if (AllUtilisateurs[i].password == password)
                    {
                        r = "le mot de passe est identique !";
                    }
                    else
                    {
                        AllUtilisateurs[i].password = password;
                        r       = "le mot de passe a bien ete change !";
                        context = new fmnContext();
                        context.Users.Update(AllUtilisateurs[i]);
                        context.SaveChanges();
                    }
                }
            }

            return(r);
        }
        public void ajouterUtilisateur(string name, string mail, string password)
        {
            context = new fmnContext();
            var u1 = new Utilisateur(name, "fichier/logo.jpg", mail, password, "France", 0);

            creation(u1);
        }
        public void ModifierPartie(int id, int id_ami, int th, int score)
        {
            Partie partieEnCours = this.getPartieEnCours(id, id_ami);

            if (partieEnCours != null)
            {
                if (partieEnCours.Manches.Last().s1 == -1)
                {
                    partieEnCours.Manches.Last().s1 = score;
                    if (partieEnCours.Manches.Last().s1 > partieEnCours.Manches.Last().s2)
                    {
                        partieEnCours.s1 = partieEnCours.s1 + 1;
                    }
                    if (partieEnCours.Manches.Last().s1 < partieEnCours.Manches.Last().s2)
                    {
                        partieEnCours.s2 = partieEnCours.s2 + 1;
                    }
                    if (partieEnCours.s2 == 3 || partieEnCours.s1 == 3)
                    {
                        partieEnCours.player = -1;
                    }
                }
                else if (partieEnCours.Manches.Last().s2 == -1)
                {
                    partieEnCours.Manches.Last().s2 = score;
                    if (partieEnCours.Manches.Last().s1 > partieEnCours.Manches.Last().s2)
                    {
                        partieEnCours.s1 = partieEnCours.s1 + 1;
                    }
                    if (partieEnCours.Manches.Last().s1 < partieEnCours.Manches.Last().s2)
                    {
                        partieEnCours.s2 = partieEnCours.s2 + 1;
                    }
                    if (partieEnCours.s2 == 3 || partieEnCours.s1 == 3)
                    {
                        partieEnCours.player = -1;
                    }
                }

                else
                {
                    Theme theme = _themeService.getTheme(th);
                    if (id == partieEnCours.j1.id)
                    {
                        partieEnCours.Manches.Add(new Manche(theme, score, -1));
                    }
                    else
                    {
                        partieEnCours.Manches.Add(new Manche(theme, -1, score));
                    }

                    partieEnCours.player = id_ami;
                }
                context = new fmnContext();

                context.parties.Update(partieEnCours);
                context.SaveChanges();
            }
        }
        public int getNbPartie(int id, int id_ami, string etat)
        {
            context = new fmnContext();
            int nombrePartie = 0;

            switch (etat)
            {
            default:
                nombrePartie = 0;
                break;

            case "all":
                nombrePartie = context.parties
                               .Include(p => p.j1)
                               .Include(p => p.j2)
                               .Where(p => (p.j1.id == id || p.j2.id == id))
                               .Count();
                break;

            case "victoireAvecAmi":
                nombrePartie = context.parties
                               .Include(p => p.j1)
                               .Include(p => p.j2)
                               .Where(p => (p.j1.id == id || p.j2.id == id) && (p.j1.id == id_ami || p.j2.id == id_ami) &&
                                      (((p.j1.id == id && p.s1 > p.s2) || (p.s1 < p.s2 && p.j2.id == id)) && p.player == -1))
                               .Count();
                break;

            case "defaiteAvecAmi":
                nombrePartie = context.parties
                               .Include(p => p.j1)
                               .Include(p => p.j2)
                               .Where(p => (p.j1.id == id || p.j2.id == id) && (p.j1.id == id_ami || p.j2.id == id_ami) &&
                                      (((p.j1.id == id && p.s1 < p.s2) || (p.s1 > p.s2 && p.j2.id == id)) && p.player == -1))
                               .Count();
                break;

            case "victoire":
                nombrePartie = context.parties
                               .Include(p => p.j1)
                               .Include(p => p.j2)
                               .Where(p => (p.j1.id == id || p.j2.id == id) &&
                                      (((p.j1.id == id && p.s1 > p.s2) || (p.s1 < p.s2 && p.j2.id == id)) && p.player == -1))
                               .Count();
                break;

            case "defaite":
                nombrePartie = context.parties
                               .Include(p => p.j1)
                               .Include(p => p.j2)
                               .Where(p => (p.j1.id == id || p.j2.id == id) &&
                                      (((p.j1.id == id && p.s1 < p.s2) || (p.s1 > p.s2 && p.j2.id == id)) && p.player == -1))
                               .Count();
                break;
            }

            return(nombrePartie);
        }
        public IList <Contact> ALLContact()
        {
            context = new fmnContext();
            var requete = from contact in context.Contact.Include(b => b.user)
                          select contact;

            // Execution de la requête
            return(requete.ToList());
        }
        public IList <Utilisateur> ALL()
        {
            context = new fmnContext();
            var requete = from utilisateur in context.Users
                          select utilisateur;

            // Execution de la requête
            return(requete.ToList());
        }
        public List <Theme> ALL()
        {
            context = new fmnContext();
            var requete = from theme in context.Themes.Include(b => b.reponses).ThenInclude((Reponse r) => r.Appellations)
                          select theme;

            // Execution de la requête
            return(requete.ToList());
        }
        public IList <Reponse> getReponses(int id)
        {
            context = new fmnContext();

            Theme theme = context.Themes
                          .Where(p => p.id == id)
                          .Include(b => b.reponses)
                          .ThenInclude((Reponse r) => r.Appellations)
                          .FirstOrDefault();

            return(theme?.reponses);
        }
        public Partie getPartieEnCours(int id, int id_ami)
        {
            context = new fmnContext();

            Partie partie = context.parties
                            .Include(p => p.Manches)
                            .ThenInclude((Manche m) => m.theme)
                            .Include(p => p.j1)
                            .Include(p => p.j2)
                            .Where(p => (p.j1.id == id || p.j2.id == id) && (p.j1.id == id_ami || p.j2.id == id_ami) && p.player != -1 && p.s1 != 3 && p.s2 != 3)
                            .SingleOrDefault();

            return(partie);
        }
        public void AjouterPartie(int id, int id_ami, int th, int score)
        {
            Utilisateur joueur1 = _utilisateurService.getUser(id);
            Utilisateur joueur2 = _utilisateurService.getUser(id_ami);
            Theme       theme   = _themeService.getTheme(th);
            Partie      p       = new Partie(joueur1, joueur2, 0, 0, id_ami, new List <Manche> {
                new Manche(theme, score, -1)
            });

            context = new fmnContext();

            context.parties.Add(p);
            context.SaveChanges();
        }
        public IEnumerable <Partie> getHistorique(int id, int id_ami)
        {
            context = new fmnContext();

            IEnumerable <Partie> historique = context.parties
                                              .Include(p => p.Manches)
                                              .ThenInclude((Manche m) => m.theme)
                                              .Include(p => p.j1)
                                              .Include(p => p.j2)
                                              .Where(p => (p.j1.id == id || p.j2.id == id) && (p.j1.id == id_ami || p.j2.id == id_ami))
                                              .ToList();

            return(historique);
        }
        public IEnumerable <Partie> getPartieEnCours(int id)
        {
            context = new fmnContext();

            IEnumerable <Partie> partie = context.parties
                                          .Include(p => p.Manches)
                                          .ThenInclude((Manche m) => m.theme)
                                          .Include(p => p.j1)
                                          .Include(p => p.j2)
                                          .Where(p => (p.j1.id == id || p.j2.id == id) && p.s1 < 3 && p.s2 < 3 && p.player != -1)
                                          .ToList();

            return(partie);
        }
        public void addAmi(int user, int u)
        {
            IList <Contact> AllContact = new List <Contact> {
            };

            AllContact = ALLContact();

            context = new fmnContext();
            AllContact.Add(new Contact(getUser(user), u, "ami"));
            context.Contact.Update(AllContact.Last());
            context.SaveChanges();

            AllContact.Add(new Contact(getUser(u), user, "ami"));

            context.Contact.Update(AllContact.Last());
            context.SaveChanges();
        }
        public void addAmiOnline(int user, int u)
        {
            IList <Contact> AllContact = new List <Contact> {
            };

            AllContact = ALLContact();
            for (var i = 0; i < AllContact.Count; i++)
            {
                if ((AllContact[i].user.id == u && AllContact[i].id_contact == user) || (AllContact[i].user.id == user && AllContact[i].id_contact == u))
                {
                    AllContact[i].type = "ami";
                    context            = new fmnContext();

                    context.Contact.Update(AllContact[i]);
                    context.SaveChanges();
                }
            }
        }
        public bool getEn_Cours(int id, int id_ami)
        {
            bool resultat = false;

            context = new fmnContext();

            int nombrePartieEnCours = context.parties
                                      .Include(p => p.j1)
                                      .Include(p => p.j2)
                                      .Where(p => (p.j1.id == id || p.j2.id == id) && (p.j1.id == id_ami || p.j2.id == id_ami) && p.player != -1)
                                      .Count();

            if (nombrePartieEnCours > 0)
            {
                resultat = true;
            }

            return(resultat);
        }
        public string changePhoto(int id, string selectPhoto)
        {
            IList <Utilisateur> AllUtilisateurs = new List <Utilisateur> {
            };

            AllUtilisateurs = ALL();
            for (var i = 0; i < AllUtilisateurs.Count; i++)
            {
                if (AllUtilisateurs[i].id == id)
                {
                    AllUtilisateurs[i].photo = "fichier/" + selectPhoto + ".jpg";
                    context = new fmnContext();

                    context.Users.Update(AllUtilisateurs[i]);
                    context.SaveChanges();
                }
            }
            return("Photo changée");
        }
        public Boolean getPartieExiste(int id, int id_ami)
        {
            bool resultat = false;

            context = new fmnContext();

            int nombrePartieEnCours = context.parties
                                      .Include(p => p.j1)
                                      .Include(p => p.j2)
                                      .Where(p => ((p.j1.id == id && p.j2.id == id_ami) || (p.j1.id == id_ami && p.j2.id == id)) && (p.player == id || p.player == id_ami))
                                      .Count();

            if (nombrePartieEnCours > 0)
            {
                resultat = true;
            }

            return(resultat);
        }
        public string changePays(int id, string selectPays)
        {
            IList <Utilisateur> AllUtilisateurs = new List <Utilisateur> {
            };

            AllUtilisateurs = ALL();
            for (var i = 0; i < AllUtilisateurs.Count; i++)
            {
                if (AllUtilisateurs[i].id == id)
                {
                    AllUtilisateurs[i].pays = selectPays;
                    context = new fmnContext();

                    context.Users.Update(AllUtilisateurs[i]);
                    context.SaveChanges();
                }
            }

            return("Vous avez changé de pays");
        }
        public void ChangerMeilleurScore(int u, int score)
        {
            IList <Utilisateur> AllUtilisateurs = new List <Utilisateur> {
            };

            AllUtilisateurs = ALL();
            Utilisateur user = new Utilisateur();

            for (var i = 0; i < AllUtilisateurs.Count; i++)
            {
                if (AllUtilisateurs[i].id == u && AllUtilisateurs[i].meilleurScore < score)
                {
                    user = AllUtilisateurs[i];
                    user.meilleurScore = score;

                    context = new fmnContext();

                    context.Users.Update(user);
                    context.SaveChanges();
                }
            }
        }
        public IList <Reponse> ALLREPONSE()
        {
            context = new fmnContext();
            var requete = from reponse in context.Reponses.Include(b => b.Appellations)
                          select reponse;

            // Execution de la requête
            return(requete.ToList());

            /*Theme theme = context.Themes
             *  .Include(b => b.reponses)
             *  .ThenInclude((Reponse r)=>r.Appellations)
             *  .FirstOrDefault();
             *
             * return theme.reponses;*/

            //.SingleOrDefault(p => p.text == "PSG");

            /*var reponses = context.Reponses
             *  .Include(p => p.appellation).ToList();*/

            //List<Reponse> reposnes = theme.reponses;

            //foreach(var a in reposnes)
            //{
            //    var reponses = context.Reponses
            //        .Where(p => p.id == a.id)
            //     .Include(p => p.appellation).ToList();
            //}

            /*
             * var requete = from reponse in context.Reponses
             *            where reponse.theme.id == id
             *            select reponse;*/

            // Execution de la requête
            //return reposnes;
        }
 public void creation(Utilisateur u1)
 {
     context = new fmnContext();
     context.Users.Add(u1);
     context.SaveChanges();
 }