using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Project.Device
{
	public class CSequence :  AR.StateMachineSequence
    {
		public CSequence(int stepLen = 255) : base(stepLen) { }

		public void Clear(eSMStep idx)
		{
			base.Clear((int)idx);
		}
		public int Get(eSMStep idx)
		{
			return base.Get((int)idx);
		}

		public void Set(eSMStep idx, byte value)
		{
			base.Set((int)idx, value);
		}


		public void Update(eSMStep idx, int incValue = 1)
		{
			base.Update((int)idx, incValue);
		}
		public TimeSpan GetTime(eSMStep idx = 0)
		{
			return base.GetTime((int)idx);
		}
		public int GetData(eSMStep idx)
		{
			return base.GetData((int)idx);
		}
		public void ClearData(eSMStep idx) { base.ClearData((int)idx); }
		public void AddData(eSMStep idx, byte value = 1)
		{
			base.AddData((int)idx, value);
		}
		public void SetData(eSMStep idx, byte value)
		{
			_runseqdata[(int)idx] = value;
		}

		public void UpdateTime(eSMStep idx)
		{
			_runseqtime[(int)idx] = DateTime.Now;
		}
	}

	public class CStateMachine : AR.StateMachine
	{
		/// <summary>
		/// Sequece Value / data
		/// </summary>
		public CSequence seq;
		public eSMStep PrePauseStep = eSMStep.NOTSET;
		public CStateMachine()
		{
			seq = new CSequence(255);
		}

		public new eSMStep Step { get { return (eSMStep)base.Step; } }
		public void SetNewStep(eSMStep newstep_, Boolean force = false)
		{
			//일시중지라면 중지전의 상태를 백업한다
			if (newstep_ == eSMStep.PAUSE && this.Step != eSMStep.PAUSE && this.Step != eSMStep.WAITSTART) PrePauseStep = this.Step;
			base.SetNewStep((byte)newstep_, force);
		}

		public new eSMStep getNewStep
		{
			get
			{
				return (eSMStep)newstep_;
			}
		}
		public new eSMStep getOldStep
		{
			get
			{
				return (eSMStep)oldstep_;
			}
		}
	}
}
