using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using Aitex.Core.RT.Log;
using VirgoUI.Controls.Parts;
using MECF.Framework.Common.Equipment;
using OpenSEMI.ClientBase;
using OpenSEMI.Ctrlib.Controls;
using Slot = OpenSEMI.Ctrlib.Controls.Slot;
/// 
/// This view model is basic model used for machine part
/// 
/// 
namespace VirgoUI.Client.Models
{
    public class UnitModel :  BaseModel
    {
        #region Property
        public ModuleInfo FOUPA { get; set; }
        public ModuleInfo FOUPB { get; set; }
        public ModuleInfo TM { get; set; }
        public ModuleInfo EFEM { get; set; }
        public ModuleInfo Aligner { get; set; }
        public ModuleInfo LLA { get; set; }
        public ModuleInfo LLB { get; set; }
        public ModuleInfo PM1 { get; set; }
        public ModuleInfo PM2 { get; set; }
        public ModuleInfo PM3 { get; set; }
        public ModuleInfo PM4 { get; set; }
        public ModuleInfo PM5 { get; set; }
        public ModuleInfo PM6 { get; set; }
        #endregion
        protected override void OnInitialize()
        {
            base.OnInitialize();         
        }
        protected void InitTM()
        {
            TM = ModuleManager.ModuleInfos["TMRobot"];
        }
        protected void InitLL()
        {
            LLA = ModuleManager.ModuleInfos["LLA"];
            LLB = ModuleManager.ModuleInfos["LLB"];
        }
        protected void InitEFEM()
        {
            EFEM = ModuleManager.ModuleInfos["EfemRobot"];
            Aligner = ModuleManager.ModuleInfos["Aligner"];
        }
        protected void InitFOUP()
        {
            FOUPA = ModuleManager.ModuleInfos["LP1"];
            FOUPB = ModuleManager.ModuleInfos["LP2"];
        }
        protected void InitPM()
        {
            PM1 = ModuleManager.ModuleInfos["PM1"];
            PM2 = ModuleManager.ModuleInfos["PM2"];
            PM3 = ModuleManager.ModuleInfos["PM3"];
            PM4 = ModuleManager.ModuleInfos["PM4"];
            PM5 = ModuleManager.ModuleInfos["PM5"];
            PM6 = ModuleManager.ModuleInfos["PM6"];
        }
 
        /// 
        /// support wafer transfer for slot
        /// 
        public void OnWaferTransfer(DragDropEventArgs args)
        {
            try
            {
                WaferMoveManager.Instance.TransferWafer(args.TranferFrom, args.TranferTo, 0.0f);
            }
            catch (Exception ex)
            {
                LOG.Error(ex.Message, ex);
            }
        }
        /// 
        /// support context menu
        /// 
        public void OnMouseUp(object sender, MouseButtonEventArgs e)
        {
            if (e.ChangedButton == MouseButton.Right)
            {
                Slot slot = sender as Slot;
                ContextMenu cm = ContextMenuManager.Instance.GetSlotMenus(slot);
                if (cm != null)
                {
                    ((FrameworkElement)e.Source).ContextMenu = cm;
                }
            }
        }
    }
}