using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AR;
namespace Project
{
	public partial class FMain
	{
		Dialog.fFinishJob fsum = null;
		void HideSummary()
		{
			if (this.InvokeRequired)
			{
				this.BeginInvoke(new MethodInvoker(HideSummary), null);
			}
			else
			{
				if (fsum != null)
				{
					if (fsum.IsDisposed == false && fsum.Disposing == false)
					{
						fsum.Close();
						fsum.Dispose();
					}
					fsum = null;
				}
			}
		}
		void ShowSummary()
		{
			if (fsum == null || fsum.IsDisposed || fsum.Disposing == true)
			{
				fsum = new Dialog.fFinishJob();
				fsum.FormClosed += (s1, e1) =>
				{
					//해당 폼이 닫힐때 처리한다.
					if (PUB.sm.Step == eSMStep.FINISH)
					{
						//완료상때일때 닫으면
						Run_MotionPositionReset();
					}
				};
				fsum.Show();
			}
			else
			{
				fsum.Show();
				fsum.Activate();
			}
		}
		void UserStepWait(eWorkPort target)
		{
			if (PUB.flag.get(eVarBool.FG_USERSTEP))
			{
				if (target == eWorkPort.Left)
				{
					if (LockUserL.WaitOne(1))
						LockUserL.Reset();
				}
				else
				{
					if (LockUserR.WaitOne(1))
						LockUserR.Reset();
				}
			}
		}
		/// 
		/// user step 상황에서 자동으로 멈추게 합니다.
		/// 
		void UserStepRun(eWorkPort target)
		{
			if (PUB.flag.get(eVarBool.FG_USERSTEP))
			{
				if (target == eWorkPort.Right)
				{
					if (LockUserL.WaitOne(1) == false)
						LockUserL.Set();
				}
				else
				{
					if (LockUserR.WaitOne(1) == false)
						LockUserR.Set();
				}
			}
		}
		/// 
		/// 홈작업이 진행 가능한지 하드웨어 상태를 확인한다.
		/// 
		/// 
		bool CheckHomeProcess_HW_Available(Boolean needHomeSet)
		{
			//모션이 초기화되지 않았다면 오류로 한다
			if (PUB.mot.IsInit == false)
			{
				PUB.Result.SetResultMessage(eResult.MOTION, eECode.AZJINIT, eNextStep.NOTHING);
				return false;
			}
			//모든 홈이 되어야 가능하다
			if (needHomeSet)
			{
				if (PUB.mot.IsInit && PUB.mot.HasHomeSetOff == true)
				{
					PUB.Result.SetResultMessage(eResult.MOTION, eECode.MOT_HSET, eNextStep.ERROR);
					return false;
				}
			}
			//안전센서가 작동했다면 중지한다.
			if (DIO.isSaftyDoorF(true) == false || DIO.isSaftyDoorR() == false)
			{
				PUB.Result.SetResultMessage(eResult.SAFTY, eECode.DOORSAFTY, eNextStep.ERROR);
				return false;
			}
			//모션모델이 반드시 설정되어있어야 한다
			if (PUB.Result.isSetmModel == false)
			{
				PUB.Result.SetResultMessage(eResult.MOTION, eECode.NOMODELM, eNextStep.ERROR);
				return false;
			}
			//AIR확인
			if (DIO.GetIOOutput(eDOName.SOL_AIR) == false)
			{
				PUB.Result.SetResultMessage(eResult.SENSOR, eECode.AIRNOOUT, eNextStep.ERROR);
				return false;
			}
			// 비상정지 확인
			if (DIO.IsEmergencyOn() == true)
			{
				PUB.Result.SetResultMessage(eResult.SAFTY, eECode.EMERGENCY, eNextStep.ERROR);
				return false;
			}
			return true;
		}
	}
}