using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.Data;

namespace Mesnac.Controls.Feeding
{
    [ToolboxBitmap(typeof(System.Windows.Forms.Label))]
    public partial class MixingStep : Label
    {
        private string _dataName;
        private DataTable _data;
        private DataTable _cloneData;       //克隆数据源
        private OnOffStatuses _finishStatus;
        private int _lengthMixer;
        private bool _isCurrent;
        private string _finishStatusName;
        private string _lengthMixerName;

        public MixingStep()
        {
            InitializeComponent();
        }

        public MixingStep(IContainer container)
        {
            container.Add(this);

            InitializeComponent();
        }
        /// <summary>
        /// 数据源动画属性
        /// </summary>
        public string DataName
        {
            get { return _dataName; }
            set { _dataName = value; }
        }
        /// <summary>
        /// 一车结束标志动画属性
        /// </summary>
        public string FinishStatusName
        {
            get { return _finishStatusName; }
            set { _finishStatusName = value; }
        }

        /// <summary>
        /// 当前步骤动画属性
        /// </summary>
        public string LengthMixerName
        {
            get { return _lengthMixerName; }
            set { _lengthMixerName = value; }
        }
        /// <summary>
        /// 数据源
        /// </summary>
        public DataTable Data
        {
            get { return _data; }
            set
            {
                _data = value;

                if (this._cloneData == null)
                {
                    this.InitData(false);
                }
            }
        }
        public bool IsCurrent
        {
            get { return _isCurrent; }
            set { _isCurrent = value; }
        }

        /// <summary>
        /// 初始化数据
        /// </summary>
        private void InitData(bool isclear)
        {
            if (isclear)
            {
                if (this._cloneData != null)
                {
                    this._cloneData.Dispose();
                    this._cloneData = null;
                }
            }
            if (this._cloneData == null && this._data != null && this._data.Rows.Count > 0)
            {
                this._cloneData = new DataTable();
                this._cloneData.Columns.Add("步骤", typeof(string));
                this._cloneData.Columns.Add("动作", typeof(string));
                int j = 1;
                for (int i = 0; i < this._data.Rows.Count; i++)
                {
                    DataRow dr = this._cloneData.NewRow();
                    dr["步骤"] = this._data.Rows[i]["步骤"].ToString();
                    dr["动作"] = this._data.Rows[i]["动作"].ToString();
                    if (i + 1 == this._data.Rows.Count)
                    {
                        dr["步骤"] = j;
                        this._cloneData.Rows.Add(dr);
                        continue;
                    }
                    if (this._data.Rows[i + 1]["条件"].ToString().Trim() == "同时执行")
                    {
                        continue;
                    }
                    dr["步骤"] = j;
                    this._cloneData.Rows.Add(dr);
                    j++;
                }
            }
        }

        /// <summary>
        /// 当前步骤
        /// </summary>
        public int LengthMixer
        {
            get { return _lengthMixer; }
            set
            {
                _lengthMixer = value;
                if (this._cloneData != null)
                {
                    if (this._cloneData.Columns.Contains("步骤") && this._cloneData.Columns.Contains("动作"))
                    {
                        if (this._cloneData.Rows.Count > 0)
                        {
                            for (int i = 0; i < this._cloneData.Rows.Count; i++)
                            {
                                DataRow row = this._cloneData.Rows[i];
                                object val = row["步骤"];
                                if (val != DBNull.Value)
                                {
                                    if (Convert.ToInt32(val) == this._lengthMixer)
                                    {
                                        if (IsCurrent)
                                            this.Text = row["动作"].ToString();
                                        else
                                        {
                                            if ((i + 1) == this._cloneData.Rows.Count)
                                                this.Text = "";
                                            else
                                                this.Text = this._cloneData.Rows[i + 1]["动作"].ToString();
                                        }
                                        break;
                                    }
                                }
                            }
                            if (!IsCurrent && _lengthMixer == 0)
                            {
                                this.Text = this._cloneData.Rows[0]["动作"].ToString();
                            }
                        }
                    }
                }
            }
        }


        /// <summary>
        /// 一车结束标志
        /// </summary>
        public OnOffStatuses FinishStatus
        {
            get { return _finishStatus; }
            set
            {
                if ((int)value > 1)
                {
                    this._finishStatus = OnOffStatuses.On;
                }
                else if ((int)value < 0)
                {
                    this._finishStatus = OnOffStatuses.Off;
                }
                else
                {
                    this._finishStatus = value;
                }
                //如果一车标志结束,则重新绑定数据源
                if (this._finishStatus == OnOffStatuses.On)
                {
                    this.InitData(true);
                }
            }
        }
    }
}