/*
 * Если вы не покупали лицензии, то Ваши права на использования кода ограничены не коммерческим использованием и 
 * регулируются данной лицензией http://o-s-a.net/doc/license_simple_engine.pdf
*/

using System.Collections.Generic;
using System.Windows.Forms;
using OsEngine.Entity;

namespace OsEngine.OsData
{

    /// <summary>
    /// Логика взаимодействия для NewSecurityDialog.xaml
    /// </summary>
    public partial class NewSecurityUi
    {
        /// <summary>
        /// бумаги которые есть в сервере
        /// </summary>
        private List<Security> _securities;

        /// <summary>
        /// выбранная бумага
        /// </summary>
        public Security SelectedSecurity;

        /// <summary>
        /// конструктор
        /// </summary>
        /// <param name="securities">бумаги доступные к выбору</param>
        public NewSecurityUi(List<Security> securities)
        {
            InitializeComponent();
            _securities = securities;

            GetClasses();
            CreateTable();
            ReloadSecurityTable();
            ComboBoxClass.SelectionChanged += ComboBoxClass_SelectionChanged;
        }

        /// <summary>
        /// тублица для бумаг
        /// </summary>
        private DataGridView _grid;

        /// <summary>
        /// создать таблицу для бумаг
        /// </summary>
        private void CreateTable()
        {
            _grid = new DataGridView();

            _grid.AllowUserToOrderColumns = false;
            _grid.AllowUserToResizeRows = false;
            _grid.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
            _grid.AllowUserToDeleteRows = false;
            _grid.AllowUserToAddRows = false;
            _grid.RowHeadersVisible = false;
            _grid.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            _grid.MultiSelect = false;

            DataGridViewCellStyle style = new DataGridViewCellStyle();
            style.Alignment = DataGridViewContentAlignment.TopLeft;
            style.WrapMode = DataGridViewTriState.True;
            _grid.DefaultCellStyle = style;

            DataGridViewTextBoxCell cell0 = new DataGridViewTextBoxCell();
            cell0.Style = style;

            DataGridViewColumn column0 = new DataGridViewColumn();
            column0.CellTemplate = cell0;
            column0.HeaderText = @"Код бумаги";
            column0.ReadOnly = true;
            column0.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            _grid.Columns.Add(column0);

            DataGridViewColumn column1 = new DataGridViewColumn();
            column1.CellTemplate = cell0;
            column1.HeaderText = @"Название";
            column1.ReadOnly = true;
            column1.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            _grid.Columns.Add(column1);

            HostSecurity.Child = _grid;
        }

        /// <summary>
        /// выгрузить все доступные классы в меню выбора классов
        /// </summary>
        private void GetClasses()
        {
            List<string> classes = new List<string>();
            for (int i = 0; i < _securities.Count; i++)
            {
                if (classes.Find(s => s == _securities[i].NameClass) == null)
                {
                    classes.Add(_securities[i].NameClass);
                    ComboBoxClass.Items.Add(_securities[i].NameClass);
                }
            }

            ComboBoxClass.Items.Add("All");

            if (classes.Find(clas => clas == "МосБиржа топ") != null)
            {
                ComboBoxClass.SelectedItem = "МосБиржа топ";
            }
            else
            {
                ComboBoxClass.SelectedItem = "All";
            }
        }

        /// <summary>
        /// перезагрузить меню выбора инструментов
        /// </summary>
        private void ReloadSecurityTable()
        {
            if (ComboBoxClass.SelectedItem == null)
            {
                return;
            }

            _grid.Rows.Clear();

            List<DataGridViewRow> rows = new List<DataGridViewRow>();
            for (int i = 0; _securities != null && i < _securities.Count; i++)
            {
                if (ComboBoxClass.SelectedItem.ToString() != "All" && _securities[i].NameClass != ComboBoxClass.SelectedItem.ToString())
                {
                    continue;
                }

                if (_securities[i].NameFull== null ||
                    _securities[i].NameFull[0] == '\'' && _securities[i].NameFull[1] == '\'' &&
                    _securities[i].NameFull.Length == 2)
                {
                    continue;
                }

                DataGridViewRow row = new DataGridViewRow();
                row.Cells.Add(new DataGridViewTextBoxCell());
                row.Cells[0].Value = _securities[i].Name;

                row.Cells.Add(new DataGridViewTextBoxCell());
                row.Cells[1].Value = _securities[i].NameFull;

                rows.Add(row);
            }

            _grid.Rows.AddRange(rows.ToArray());
        }

        /// <summary>
        /// изменился выбранный элемент в меню выбора классов
        /// </summary>
        void ComboBoxClass_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
        {
            ReloadSecurityTable();
        }

        /// <summary>
        /// нажата кнопка "Принять"
        /// </summary>
        private void ButtonAccept_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            if (_grid.SelectedCells[0] == null ||
                string.IsNullOrWhiteSpace(_grid.SelectedCells[0].ToString()))
            {
                return;
            }

            SelectedSecurity = _securities.Find(security => security.Name == _grid.SelectedCells[0].Value.ToString());
            Close();
        }

    }
}