public void RefreshPlanets(Views.Game.Game g)
        {
            var window = new PlanetSelectorWindow(new PlanetSelectorVM(g, true, true, new List <PlanetVM>()));

            window.ShowDialog();
            if (window.ReturnCards?.Any() != true)
            {
                return;
            }

            var ev = new GameEvent()
            {
                Type       = GameEventType.RefreshPlanets,
                Timestamp  = DateTime.UtcNow,
                Gametime   = g.TimeElapsed,
                Parameters = JToken.FromObject(window.ReturnCards.Select(e => e.Name))
            };

            g.UpdateWithLogs(ev);
        }
        public void AssignPlanets(Views.Game.Game g)
        {
            var window = new PlanetSelectorWindow(new PlanetSelectorVM(g, false, false, g.SelectedUser.Planets.AllItems.ToList()));

            window.ShowDialog();
            if (window.ReturnCards == null)
            {
                return;
            }
            var allUserPlanets      = g.Users.SelectMany(e => e.Planets.AllItems).ToList();
            var existingOccupations = window.ReturnCards.Where(e =>
                                                               allUserPlanets.Exists(u => u.Model.Name.Equals(e.Name, StringComparison.CurrentCultureIgnoreCase)))
                                      .ToList();

            if (existingOccupations.Any())
            {
                if (MessageBox.Show(
                        string.Join("\r\n",
                                    existingOccupations.Select(e =>
                                                               $"{e.Name} belongs to {g.Users.First(u => u.Planets.AllItems.Any(p => p.Model.Name.Equals(e.Name, StringComparison.InvariantCultureIgnoreCase))).Name}")) + "\r\nAre you sure to continue?",
                        "The following planets are already occupied.", MessageBoxButton.YesNo) == MessageBoxResult.No)
                {
                    return;
                }
            }
            var ev = new GameEvent()
            {
                Type       = GameEventType.AssignPlanets,
                Timestamp  = DateTime.UtcNow,
                Gametime   = g.TimeElapsed,
                Parameters = JToken.FromObject(new AssignPlanetsParameter()
                {
                    TargetUser    = g.SelectedUser.Name,
                    TargetPlanets = window.ReturnCards.Select(e => e.Name).ToArray()
                })
            };

            g.UpdateWithLogs(ev);
        }