using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Muzzle.Class;

namespace Muzzle
{
    /// <summary>
    /// Логика взаимодействия для Main.xaml
    /// </summary>
    public partial class Main : Page
    {
        public static class Products
        {
            public static Frame frm;
        }
        List<Product> products = BaseConnect.baseConnect.Product.ToList();
        List<ProductType> productsType = BaseConnect.baseConnect.ProductType.ToList();
        public Main()
        {
            InitializeComponent();
            listBoxNamordnik.ItemsSource = products; //Вывод данных в лист из бд
            
            You.ItemsSource = productsType;
            You.DisplayMemberPath = "Title"; //указываем какой столбец выводим
            You.SelectedValuePath = "ID"; //указываем по кому находим столбец
        }

        private void TextBlock_Loaded(object sender, RoutedEventArgs e)
        {
            //Определяет какой объект вызвал это событие
            TextBlock textBlock = sender as TextBlock; 

            //Сравнивает ID и заносит в одну строку все материалы, которые относятся к этому продукту
            int productID = (int)textBlock.Tag;
            List<ProductMaterial> materials = BaseConnect.baseConnect.ProductMaterial.Where(x => x.ProductID == productID).ToList(); 
            string str = "";
            foreach (ProductMaterial pm in materials)
            {
                str+=pm.Material.Title+ ", ";
            }
            // Метод Trim().TrimEnd('') удаляет символ в конце, ToLower делает все буквы маленькими
            textBlock.Text = str.Trim().TrimEnd(',').ToLower();
        }

        private void TextBlock_Loaded_1(object sender, RoutedEventArgs e)
        {
            //Определяет какой объект вызвал это событие
            TextBlock textBlock = sender as TextBlock;

            //Сравнивает ID и считает стоимость продукта (суммирует стоимость материалов)
            int productID = (int)textBlock.Tag; //Tag запоминает ID из макета для того, чтобы потом сравнить с ID из бд
            List<ProductMaterial> materials = BaseConnect.baseConnect.ProductMaterial.Where(x => x.ProductID == productID).ToList();
            double cost = 0; //для стоимости
            foreach (ProductMaterial pm in materials)
            {
                cost += pm.Material.Cost; //для стоимости
            }
            textBlock.Text = cost.ToString(); //для стоимости
        }

        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ComboBox comboBox = sender as ComboBox;
            int productType = (int)comboBox.SelectedValue; //
            if (productType !=1) //если выбран не 1 пункт "все типы"
            {
                List<Product> products1 = products.Where(x => x.ProductTypeID == productType).ToList(); //создаем новый лист, чтобы обновлялся фильтр (а не фильтр накладывался на фильтр)
                listBoxNamordnik.ItemsSource = products1; //вывод листа
            }
            else //если выбран 1 пункт "все типы"
            {
                listBoxNamordnik.ItemsSource = products; //вывод спсика без фильтра
            }
            
           
        }

        private void ComboBox_Selected(object sender, SelectionChangedEventArgs e)
        {
            
            ComboBox comboBox = sender as ComboBox; //Определяет какой объект вызвал это событие
            switch (comboBox.SelectedIndex)
            {
                case 0:
                    products = products.OrderBy(x => x.Title).ToList();
                    break;
                case 1:
                    products = products.OrderBy(x => x.Title).ToList();
                    products.Reverse();
                    break;
                case 2:
                    products = products.OrderBy(x => x.ProductionWorkshopNumber).ToList();
                    break;
                case 3:
                    products = products.OrderBy(x => x.ProductionWorkshopNumber).ToList();
                    products.Reverse();
                    break;
                case 4:
                    products = products.OrderBy(x => x.MinCostForAgent).ToList();
                    break;
                case 5:
                    products = products.OrderBy(x => x.MinCostForAgent).ToList();
                    products.Reverse();
                    break;

            }
            listBoxNamordnik.ItemsSource = products;
            
        }

        private void TextBox_TextChanged (object sender, TextChangedEventArgs e)
        {
            if (Search.Text != "") //если поле поиска не пустое, то
            {
                List<Product> products1 = products.Where(x => x.Title.Contains(Search.Text) /*Если хотим по описанию поиск, то так и пишем (Description.Text)*/).ToList(); //создаём лист, в котором выводим результаты поиска
                listBoxNamordnik.ItemsSource = products1; //вывод нового листа
            }
            else
            {
                listBoxNamordnik.ItemsSource = products; //вывод спсика без поиска
            }
        }



        private void btnDobby_Click(object sender, RoutedEventArgs e)
        {
            Add add = new Add();
            add.ShowDialog();

        }

        private void btnIzmena_CLick(object sender, RoutedEventArgs e)
        {
            Update update = new Update();
            update.ShowDialog();
        }
    }       
}
