using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Швейная_фабрика
{
    public partial class FormLeven : Form
    {
        public FormLeven()
        {
            InitializeComponent();
        }
        /// <summary>
        /// Расстояние Левенштейна
        /// </summary>
        /// <param name="txt1">Первая строка</param>
        /// <param name="txt2">Вторая строка</param>
        /// <returns>Расстояние Левенштейна между двумя строками</returns>
        static int Levenshtein(string txt1, string txt2)
        {
            string t1 = txt1.ToLower().Trim();
            string t2 = txt2.ToLower().Trim();
            int CntLev = Math.Abs(t1.Length - t2.Length);
            // перебор до последнего символа более короткой строки
            for (int i = 0; i <= Math.Min(t1.Length, t2.Length) - 1; i++)
            {
                if (t1[i] != t2[i])
                    CntLev++;
            }
            return CntLev;
        }

        List<string> LstTkani = new List<string>();

        /// <summary>
        /// Отобразить весь список тканей
        /// </summary>
        private void BtnShowAll_Click(object sender, EventArgs e)
        {
            DgvTkani.Rows.Clear();
            foreach (string Tkan in LstTkani)
                DgvTkani.Rows.Add(Tkan);
        }
        /// <summary>
        /// На момент открытия формы сформировать список с названиями тканей
        /// и заполнить DataGridView 
        /// </summary>
        private void FormLeven_Load(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection("Data Source=213.155.192.79,3002;Initial Catalog=СlothesFactoryLG;Persist Security Info=True;User ID=u21lebed;Password=hgm8");
            con.Open();
            string TxtQuery = "select Title from Tkan";

            SqlCommand query1 = new SqlCommand(TxtQuery, con);
            // выполнить запрос
            SqlDataReader res = query1.ExecuteReader();

            while (res.Read())
                LstTkani.Add(res["Title"].ToString());
            con.Close();

            BtnShowAll_Click(sender, e);
        }
        /// <summary>
        /// Поиск с учетом расстояния Левенштейна
        /// </summary>
        private void BtnFind_Click(object sender, EventArgs e)
        {
            DgvTkani.Rows.Clear();
            foreach (string Tkan in LstTkani)
                if (Levenshtein(Tkan, TbxFind.Text) <= 3)
                    DgvTkani.Rows.Add(Tkan);
        }
    }
}
