/// <summary>
 /// Callback-метод кнопки применения изменений профиля
 /// </summary>
 void SubmitButton_Click(object sender, RoutedEventArgs e)
 {
     if (dbase.Login != DataLogBox.Text)
     {
         if (dbase.IsLoginCorrect(DataLogBox.Text) && !dbase.CheckLogin(DataLogBox.Text))
         {
             dbase.Pass  = DataPassBox.Text;
             dbase.Login = DataLogBox.Text;
             dbase.SaveMe();
             var mes = new Sign("Изменения приняты!");
             mes.Show();
         }
         else
         {
             DataPassBox.Text = dbase.Pass;
             DataLogBox.Text  = dbase.Login;
             var mes = new Sign("Ошибка!");
             mes.Show();
         }
     }
     else
     {
         dbase.Pass = DataPassBox.Text;
         dbase.SaveMe();
         var mes = new Sign("Изменения приняты!");
         mes.Show();
     }
 }
        /// <summary>
        /// Callback-метод кнопки удаления объекта
        ///	в зависимости от выбора в выпадающем меню
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void DeleteButton_Click(object sender, RoutedEventArgs e)
        {
            var mes = new Sign();

            switch (flag)
            {
            case 0:
                dbase.DeleteUser(findUser.Id);
                findUser.Clear();
                ClearFindBlocks();
                mes.SetMessage("Пользователь удален!");
                break;

            case 1:
                dbase.DeleteGame(findGame.GameId);
                findGame.Clear();
                ClearFindBlocks();
                mes.SetMessage("Игра удалена!");
                break;

            case 2:
                dbase.DeleteTicket(findTicket.TicketId);
                findTicket.Clear();
                mes.SetMessage("Билет удален!");
                ClearFindBlocks();
                break;

            default:
                mes.SetMessage("Ошибка удаления!");
                break;
            }
            mes.Show();
        }
        /// <summary>
        /// Callback-метод кнопки применения изменений
        /// </summary>
        void SubmitChangesButton_Click(object sender, RoutedEventArgs e)
        {
            var mes = new Sign();

            switch (flag)
            {
            case 0:
                if (CheckUserData())
                {
                    dbase.SaveUser(findUser);
                    mes.SetMessage("Пользователь сохранен!");
                }
                else
                {
                    mes.SetMessage("Ошибка сохранения!");
                }
                break;

            case 1:
                if (CheckGameData())
                {
                    dbase.SaveGame(findGame);
                    mes.SetMessage("Игра сохранена!");
                }
                else
                {
                    mes.SetMessage("Ошибка сохранения!");
                }
                break;

            case 2:
                if (CheckTicketData())
                {
                    dbase.SaveTicket(findTicket);
                    mes.SetMessage("Билет сохранен!");
                }
                else
                {
                    mes.SetMessage("Ошибка сохранения!");
                }
                break;

            default:
                mes.SetMessage("Ошибка сохранения!");
                break;
            }
            mes.Show();
        }
        /// <summary>
        /// Callback-метод при нажатии на игру в сетке игр
        /// </summary>
        void Double_Click(object sender, RoutedEventArgs e)
        {
            Sample row = (Sample)AllGamesGrid.SelectedItem;
            Int32  id  = Convert.ToInt32(row.P1);

            if (row.P6 == "Opened")
            {
                BetWindow bet = new BetWindow(dbase, row.ToGame());
                bet.Show();
                Close();
            }
            else
            {
                var mes = new Sign("Игра закрыта!");
                mes.Show();
            }
        }
        /// <summary>
        /// Callback-метод кнопки начала игры
        /// </summary>
        void StartGameButton_Click(object sender, RoutedEventArgs e)
        {
            if (findGame.WinCombination == "")
            {
                Random        rand    = new Random();
                StringBuilder str     = new StringBuilder();
                int[]         randmas = new int[findGame.GetMaxNum()];
                for (int i = 0; i < findGame.GetMaxNum(); i++)
                {
                    randmas[i] = i + 1;
                }
                int currand = 0;
                for (int i = 0; i < findGame.GetNumCount(); i++)
                {
                    currand = rand.Next() % (findGame.GetMaxNum());
                    if (currand != i)
                    {
                        randmas[i]      += randmas[currand];
                        randmas[currand] = randmas[i] - randmas[currand];
                        randmas[i]      -= randmas[currand];
                    }
                }
                Array.Sort(randmas, 0, findGame.GetNumCount());

                for (int i = 0; i < findGame.GetNumCount(); i++)
                {
                    str.AppendFormat("_{0}", randmas[i]);
                }
                str.Remove(0, 1);
                findGame.WinCombination = str.ToString();
                dbase.SaveGame(findGame);
                FindDataPermBox.Text = str.ToString();
                List <Ticket> tickets   = dbase.GetTicketsByGameId(findGame.GameId);
                int[][]       ticketMas = new int[tickets.Count][];
                for (int i = 0; i < tickets.Count; i++)
                {
                    ticketMas[i] = new int[findGame.GetNumCount() + 1];
                }

                for (int i = 0; i < tickets.Count; i++)
                {
                    ticketMas[i] = dbase.SplitCombination(tickets[i].Combination, findGame.GetNumCount());
                }

                for (int i = 0; i < findGame.GetNumCount(); i++)
                {
                    for (int j = 0; j < tickets.Count; j++)
                    {
                        for (int k = 0; k < findGame.GetNumCount(); k++)
                        {
                            if (randmas[i] > ticketMas[j][k])
                            {
                                break;
                            }
                            if (randmas[i] == ticketMas[j][k])
                            {
                                ticketMas[j][findGame.GetNumCount()]++;
                                break;
                            }
                        }
                    }
                }

                for (int i = 0; i < tickets.Count; i++)
                {
                    for (int j = findGame.GetNumCount(); j > 0; j--)
                    {
                        if (ticketMas[i][findGame.GetNumCount()] == j)
                        {
                            dbase.SetPrize(tickets[i].OwnerId, dbase.GetPrizeByNumberOfMatches(findGame.Pool, j, findGame.GetNumCount()));
                        }
                    }
                }
                var mes = new Sign("Игра успешно проведена!");
                mes.Show();
            }
        }
        /// <summary>
        /// Callback-метод кнопки поиска содержимого строки поиска
        /// в зависимости от выбора в выпадающем меню
        /// </summary>
        void FindButton_Click(object sender, RoutedEventArgs e)
        {
            int a = 0;

            if (flag == 0)
            {
                FindMyGamesGrid.Items.Clear();
                if (int.TryParse(FindTextBox.Text, out a))
                {
                    findUser = dbase.LoadClient(a);
                }
                else
                {
                    findUser = dbase.LoadClient(FindTextBox.Text);
                }
                if (findUser.IsUserValid())
                {
                    FindProfileData.IsEnabled = true;
                    FindMyGames.IsEnabled     = true;

                    FindDataLogBox.Text   = findUser.Login;
                    FindDataPassBox.Text  = findUser.Pass;
                    FindDataPermBox.Text  = findUser.Type.ToString();
                    FindDataIdBox.Text    = findUser.Id.ToString();
                    FindDataPointBox.Text = findUser.Money.ToString();
                    if (dbase.Type < 3)
                    {
                        FindDataPermBox.IsEnabled = false;
                    }
                    List <Game> games = findUser.GetGames();
                    for (int i = 0; i < games.Count; i++)
                    {
                        Sample sam = new Sample();
                        sam    = games[i].ToSample();
                        sam.P7 = findUser.GetTicketByGameId(games[i].GameId).GetStringFromCombination();
                        FindMyGamesGrid.Items.Add(sam);
                    }
                }
                else
                {
                    var mes = new Sign("Пользователя не существует");
                    mes.Show();
                }
            }
            else
            {
                if (Int32.TryParse(FindTextBox.Text, out a))
                {
                    if (flag == 1)
                    {
                        findGame = dbase.GetGame(a);
                        if (findGame.IsGameValid())
                        {
                            FindProfileData.IsEnabled = true;
                            FindDataLogBox.Text       = findGame.Pool.ToString();
                            FindDataPassBox.Text      = findGame.Type.ToString();
                            FindDataPermBox.Text      = findGame.WinCombination;
                            FindDataIdBox.Text        = findGame.GameId.ToString();
                            FindDataPointBox.Text     = findGame.TicketCost.ToString();
                            if (dbase.Type < 3)
                            {
                                FindDataPermBox.IsEnabled = false;
                            }
                        }
                        else
                        {
                            var mes = new Sign("Игры не существует");
                            mes.Show();
                        }
                    }
                    else if (flag == 2)
                    {
                        findTicket = dbase.GetTicket(a);
                        if (findTicket.IsTicketValid())
                        {
                            FindProfileData.IsEnabled = true;
                            FindDataLogBox.Text       = findTicket.GameId.ToString();
                            FindDataPassBox.Text      = findTicket.OwnerId.ToString();
                            FindDataPermBox.Text      = findTicket.Combination;
                            FindDataPermBox.IsEnabled = true;
                            FindDataIdBox.Text        = findTicket.TicketId.ToString();
                        }
                        else
                        {
                            var mes = new Sign("Билета не существует");
                            mes.Show();
                        }
                    }
                }
            }
        }