using DyeingComputer.UserClass;
using DyeingComputer.Windows;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.SQLite;
using System.Diagnostics.Eventing.Reader;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using static DyeingComputer.UserClass.SqliteHelper;
using static DyeingComputer.Windows.ViewStep;
namespace DyeingComputer.View
{
    /// 
    /// ProgramgroupView.xaml 的交互逻辑
    /// 
    public partial class ProgramstepsView : UserControl
    {
        public ProgramstepsView()
        {
            InitializeComponent();
            ProgramID = ProgramgroupView.Programgroup_ID;
            ProgramNAME = ProgramgroupView.Programgroup_Numder;
            this.p_title.Text = ProgramNAME;
            Programgroup_sql();
        }
        private SQLiteHelper SQLiteHelpers = null;  //定义数据库
        private readonly string DBAddress = Environment.CurrentDirectory + "\\DataBase\\800COMPUTER.db";  //数据库路径
        DataSet sql; //内存数据缓存
        string ProgramID;
        string ProgramNAME;
        public void Programgroup_sql()
        {
            SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
            SQLiteHelpers.Open();  //打开数据库
            string sql_script = "select * from ProgramSteps where ProgramID='" + ProgramID + "' order by Step asc";
            if (sql != null) sql.Clear();  //清空缓存
            sql = SQLiteHelpers.ExecuteDataSet(sql_script, null);  //读取计划表写入缓存
            //sql.Tables[0].Rows.Add(datatable_t);
            DataRow dr = sql.Tables[0].NewRow();//添加表数据
            dr["ProgramID"] = ProgramID;
            dr["Program"] = ProgramNAME;
            sql.Tables[0].Rows.Add(dr);
            Dat();
            if (sql != null) Grid.ItemsSource = sql.Tables[0].DefaultView;  //转换显示计划表
            SQLiteHelpers.Close();  //关闭连接
            //sql.Clear();  //清除缓存
            //System.GC.Collect();
        }
        public void Dat()//行号刷新
        {
            int a = sql.Tables[0].Rows.Count;
            for (int i = 0; i < a; i++)
            {
                DataRow dr = sql.Tables[0].Rows[i];
                dr.BeginEdit();
                dr["Step"] = i + 1;
                dr.EndEdit();
            }
        }
        string Numder = null;
        string ID = null;
        string P1, P2, P3, P4, P5;
        private void Grid_SelectionChanged(object sender, SelectionChangedEventArgs e)//表格选择事件
        {
            int rownum = Grid.SelectedIndex;//获取鼠标选中行并定义变量
            if (rownum != -1)//判断鼠标定位是否有效
            {
                ID = (Grid.Columns[2].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第0列,
                Numder = (Grid.Columns[3].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第1列,
                P1 = (Grid.Columns[6].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第6列,
                P2 = (Grid.Columns[7].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第7列,
                P3 = (Grid.Columns[8].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第8列,
                P4 = (Grid.Columns[9].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第9列,
                P5 = (Grid.Columns[10].GetCellContent(Grid.Items[rownum]) as TextBlock).Text;//定位第10列,
            }
        }
        private void UserControl_Loaded(object sender, RoutedEventArgs e)//打开页面时的操作
        {
            if (ID == null) ID = sql.Tables[0].Rows.Count.ToString();
            Grid.SelectedIndex = StrToInt.To16Convert10(ID)-1;
        }
        public static T GetVisualChild(Visual parent) where T : Visual
        {
            T child = default(T);
            int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
            for (int i = 0; i < numVisuals; i++)
            {
                Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
                child = v as T;
                if (child == null)
                {
                    child = GetVisualChild(v);
                }
                if (child != null)
                {
                    break;
                }
            }
            return child;
        }
        private void ProgramgroupView_edit_Click(object sender, RoutedEventArgs e)//编辑
        {
            if (string.IsNullOrEmpty(Numder)) { Numder = null; P1 = "0";P2 = "0";P3 = "0";P4 = "0";P5 = "0"; }
            if (ID == null) ID = sql.Tables[0].Rows.Count.ToString();
            ViewStep viewstop = new ViewStep(Numder, P1, P2, P3, P4, P5);
            viewstop.AddressUpdated += new ViewStep.AddressUpdateHandler(Address_ButtonClicked);
            viewstop.data = ID;
            viewstop.ShowDialog();
        }
        private void Address_ButtonClicked(object sender, AddressUpdateEventArgs e)//编辑返回结果
        {
            int i = sql.Tables[0].Rows.Count;
            int n = StrToInt.To16Convert10(ID);
            if (i == n)
            {
                DataRow dr_ = sql.Tables[0].NewRow();//添加表数据
                dr_["ProgramID"] = ProgramID;
                dr_["Program"] = ProgramNAME;
                sql.Tables[0].Rows.Add(dr_);
                Dat();
                ID = (n+1).ToString();
            }
            DataRow dr = sql.Tables[0].Rows[n-1];
            dr.BeginEdit();
            dr["StepID"] = e.StepID;
            dr["StepName"] = e.StepNAME;
            dr["ParameterName"] = e.PNAME;
            dr["Parameter1"] = e.P1;
            dr["Parameter2"] = e.P2;
            dr["Parameter3"] = e.P3;
            dr["Parameter4"] = e.P4;
            dr["Parameter5"] = e.P5;
            dr.EndEdit();
            Grid.ItemsSource = sql.Tables[0].DefaultView;
        }
        private void ProgramgroupView_Quit_Click(object sender, RoutedEventArgs e)//退出
        {
            this.Visibility = Visibility.Collapsed;//隐藏控件
        }
        private void ProgramgroupView_del_Click(object sender, RoutedEventArgs e)//删除行
        {
            int d = 0;
            int a = sql.Tables[0].Rows.Count;
            if (ID != null) { d = StrToInt.To16Convert10(ID); } else { return; }
            if (a != d)//如果删除不是最后一行执行
            {
                sql.Tables[0].Rows.RemoveAt(d - 1);
                Dat();
                Grid.ItemsSource = sql.Tables[0].DefaultView;  //转换显示计划表
            }
        }
        private void ProgramgroupView_Insert_Click(object sender, RoutedEventArgs e)//插入行
        {
            int d = 0;
       
            if (ID != null) { d = StrToInt.To16Convert10(ID); } else { return; }
            DataRow dr = sql.Tables[0].NewRow();//添加表数据
            dr["ProgramID"] = ProgramID;
            dr["Program"] = ProgramNAME;
            sql.Tables[0].Rows.InsertAt(dr, d - 1);
            ID = null;
            Dat();
            Grid.ItemsSource = sql.Tables[0].DefaultView;  //转换显示计划表
        }
        private void ProgramgroupView_Save_Click(object sender, RoutedEventArgs e)//保存
        {
            int r = 0;
            SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
            SQLiteHelpers.Open();  //打开数据库
            SQLiteHelpers.Delete("ProgramSteps", "ProgramID = '" + ProgramID + "'", null);
            DataTable data_t = new DataTable();
            data_t = sql.Tables[0].Clone();
            int a = sql.Tables[0].Rows.Count;
            for (int i = 0; i < a - 1; i++)
            {
                data_t.Clear();//清空
                DataRow dt = sql.Tables[0].Rows[i];//行转换
                DataRow dr = data_t.NewRow();
                dr.ItemArray = dt.ItemArray;
                data_t.Rows.InsertAt(dr, 0);
                r = SQLiteHelpers.InsertData("ProgramSteps", SQLiteHelpers.DataTableToDictionary(data_t));//行插入                                                                                     
            }
            Dictionary Program_Step = new Dictionary();//缓存函数
            Program_Step.Add("Step", a-1);
            SQLiteHelpers.Update("ProgramName", Program_Step, "ProgramID='" + ProgramID + "'", null);
            SQLiteHelpers.Close();  //关闭连接
            if (r != 0)
            {
                System.Windows.Forms.MessageBox.Show(ProgramNAME, Properties.Resources.Save);
                this.Visibility = Visibility.Collapsed;//隐藏控件
            }
        }
    }
}