using LiveChartsCore;
using SunlightCentralizedControlManagement_SCCM_.UserClass;
using SunlightCentralizedControlManagement_SCCM_.WindowsView;
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 System.Drawing.Drawing2D;
using System.Xml.Linq;
using System.Drawing;
using static SunlightCentralizedControlManagement_SCCM_.UserClass.SqliteHelper;
using static SunlightCentralizedControlManagement_SCCM_.WindowsView.ViewStep;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
using SunlightCentralizedControlManagement_SCCM_.ViewModel;
using LiveChartsCore.SkiaSharpView.WPF;
using System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;
using nGantt.GanttChart;
using nGantt;
using nGantt.PeriodSplitter;
using ScottPlot.TickGenerators.TimeUnits;
using System.Runtime.Serialization;
using System.Windows.Markup;
using System.Collections.ObjectModel;
using SkiaSharp;
using System.Windows.Threading;
using SunlightCentralizedControlManagement_SCCM_.ConvertMoels;
namespace SunlightCentralizedControlManagement_SCCM_.View
{
    /// 
    /// ProgramgroupView.xaml 的交互逻辑
    /// 
    public partial class ProductionPlanningView : UserControl
    {
        public ProductionPlanningView()
        {
            InitializeComponent();
            Sdatepicker.Language = XmlLanguage.GetLanguage(Configini.IniReadvalue("SYS", "Language"));
            CountDown();
        }
        private readonly UserClass.IniFile.IniFiles Configini = new UserClass.IniFile.IniFiles(Convert.ToString(System.AppDomain.CurrentDomain.BaseDirectory) + "SCCM.ini");
        private SQLiteHelper SQLiteHelpers = null;  //定义数据库
        private readonly string DBAddress = Environment.CurrentDirectory + "\\DataBase\\SCCM.db";  //数据库路径
        DataTable WorkOrder;
        private DateTime minDate;
        private DateTime maxDate;
        private void UserControl_Loaded(object sender, RoutedEventArgs e)//打开页面时的操作
        {
            Sdatepicker.Text = DateTime.Now.ToString("yyyy/MM/dd  HH:mm:ss");
            minDate = DateTime.Now.Date;
            maxDate = minDate.AddDays(1);
            //添加表右键功能
            ganttTaskContextMenuItems.Add(new ContextMenuItem(DyelotClicked, Properties.Resources.Dyelot + "..."));
            ganttTaskContextMenuItems.Add(new ContextMenuItem(ViewClicked, Properties.Resources.View + "..."));
            ganttTaskContextMenuItems.Add(new ContextMenuItem(DelayedClicked, Properties.Resources.State + "..."));
            ganttTaskContextMenuItems.Add(new ContextMenuItem(EditClicked, Properties.Resources.edit + "...")); 
            ganttTaskContextMenuItems.Add(new ContextMenuItem(DeleteClicked, Properties.Resources.Delete + "...")); 
            GanttChart.GanttTaskContextMenuItems = ganttTaskContextMenuItems;
            GanttChartNEW();
        }
        private ObservableCollection ganttTaskContextMenuItems = new ObservableCollection();
        public void GanttChartNEW()
        {               
            SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
            SQLiteHelpers.Open();  //打开数据库                       
            WorkOrder = SQLiteHelpers.ExecuteDataSet(
                "select * from WorkOrder where StartTime>'" + DateTime.Parse(Sdatepicker.Text).ToString("yyyy/MM/dd  HH:mm:ss")
                 + "'or EndTime>'" + DateTime.Parse(Sdatepicker.Text).ToString("yyyy/MM/dd  HH:mm:ss") + "'Order by StartTime", null).Tables[0];  //读取表写入缓存           
            SQLiteHelpers.Close();
            //生成表
            GanttChart.ClearGantt();
            GanttChart.Initialize(minDate, maxDate);
            var gridLineTimeLine = GanttChart.CreateTimeLine(new PeriodDaySplitter(minDate, maxDate), FormatDay);
            GanttChart.CreateTimeLine(new PeriodHourSplitter(minDate, maxDate), FormatHour);
            // Set the timeline to atatch gridlines to
            GanttChart.SetGridLinesTimeline(gridLineTimeLine, DetermineBackground);
            var rowgroup = GanttChart.CreateGanttRowGroup();
            //生成表信息
            List Chart_machines = MainWindowViewModel.Machines.AsEnumerable().Select(rowdata => rowdata.Field("name")).ToList();//转换列名为机台                                                                                                                            
            for (int i = 0; i < Chart_machines.Count(); i++)//列表机台号
            {
                var row = GanttChart.CreateGanttRow(rowgroup, Chart_machines[i]);
                DataRow[] dataRows = WorkOrder.Select("Machines='" + Chart_machines[i] + "'");
                for (int j = 0; j < dataRows.Count(); j++) //列表排程
                {
                    System.Windows.Media.Color colorBackground = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#FF336FA8");
                    System.Windows.Media.Color colorStatus = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#FF336FA8");
                    if (dataRows[j].Field("State") == 100) colorStatus = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("red");
                    try
                    {
                        colorBackground = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString(dataRows[j].Field("color"));
                    }
                    catch (Exception) { }
                    //FF336FA8
                    GanttChart.AddGanttTask(row, new GanttTask()
                    {
                        Start = DateTime.Parse(dataRows[j].Field("StartTime")),
                        End = DateTime.Parse(dataRows[j].Field("EndTime")),
                        Name = Properties.Resources.ProcessName + ": " + dataRows[j].Field("ProgramName"),
                        Background = colorBackground,
                        Status = colorStatus,
                        WorkOrder = dataRows[j].Field("WorkOrder").ToString(),
                        ID = Properties.Resources.WorkOrder + ": " + dataRows[j].Field("WorkOrder").ToString(),
                        Dyelot = Properties.Resources.Dyelot + ": " + dataRows[j].Field("Dyelot"),
                        Remark = Properties.Resources.Remark + ": " + dataRows[j].Field("Remark"),
                        ColorNumber = Properties.Resources.ColorNumber + ": " + dataRows[j].Field("ColorNumber"),
                        ColorName = Properties.Resources.ColorName + ": " + dataRows[j].Field("ColorName"),
                        Client = Properties.Resources.Client + ": " + dataRows[j].Field("Client"),
                        ClothSpecies = Properties.Resources.ClothSpecies + ": " + dataRows[j].Field("ClothSpecies"),
                        ClothWeight = Properties.Resources.ClothWeight + ": " + dataRows[j].Field("ClothWeight"),
                        BathRatio = Properties.Resources.BathRatio + ": " + dataRows[j].Field("BathRatio"),
                        Total = Properties.Resources.Total + ": " + dataRows[j].Field("Total"),  
                        USER = Properties.Resources.USER + ": " + dataRows[j].Field("user"),
                        STATE = Properties.Resources.State + ": " +StatenClassConvert.Convert( dataRows[j].Field("State").ToString()),
                        TaskProgressVisibility = System.Windows.Visibility.Hidden
                    });
                }
            }
        }//创建日程图        
        private void ViewClicked(GanttTask ganttTask)
        {
            Picture.Content = null;
            Picture.Width = 600;
            Picture.Content = new ProductionPlanningEdit(ganttTask.WorkOrder,false);
        }
        private void DyelotClicked(GanttTask ganttTask)//领料单查看
        {
            UserMessage userMessage = new UserMessage();
            userMessage.Dyelots(ganttTask.WorkOrder);
            userMessage.ShowDialog();
        }
        private void DelayedClicked(GanttTask ganttTask)
        { 
        }
        private void EditClicked(GanttTask ganttTask)
        {
            if (MainWindowViewModel.USER_Capacity[6])
            {
                SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径
                SQLiteHelpers.Open();  //打开数据库                       
                DataTable WorkOrder_dt = SQLiteHelpers.ExecuteDataSet(
                    "select * from WorkOrder where WorkOrder='" + ganttTask.WorkOrder + "'Order by StartTime", null).Tables[0];  //读取表写入缓存           
                SQLiteHelpers.Close();
                if (DateTime.Now > DateTime.Parse(WorkOrder_dt.Select().First().Field