using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Collections.Generic;
using Aitex.Core.UI.MVVM;
using Aitex.Core.Utilities;
using MECF.Framework.Simulator.Core.Commons;
using PunkHPX8_Simulator.Devices;
namespace PunkHPX8_Simulator.Views
{
    /// 
    /// Interaction logic for Simu_EfemView.xaml
    /// 
    public partial class Simu_SunWayEfemView : UserControl
    {
        public Simu_SunWayEfemView()
        {
            InitializeComponent();
            this.DataContext = new Simu_SunWayEfemViewModel();
            this.Loaded += OnViewLoaded;
        }
        private void OnViewLoaded(object sender, RoutedEventArgs e)
        {
            (DataContext as TimerViewModelBase)?.Start();
        }
    }
    class Simu_SunWayEfemViewModel : SocketDeviceViewModel
    {
        public string Title
        {
            get { return "EFEM Simulator"; }
        }
        public string WaferMap
        {
            get { return _sim.SlotMap; }
        }
        private bool _doorOpen;
        [IgnorePropertyChange]
        public bool DoorOpen
        {
            get
            {
                return _doorOpen;
            }
            set
            {
                _doorOpen = value;
                _sim.SetCassetteDoor(_doorOpen);
            }
        }
        private bool _Maintain;
        [IgnorePropertyChange]
        public bool Maintain
        {
            get
            {
                return _Maintain;
            }
            set
            {
                _Maintain = value;
                _sim.SetMaintain(_Maintain);
            }
        }
        private bool _Protrude1;
        [IgnorePropertyChange]
        public bool Protrude1
        {
            get
            {
                return _Protrude1;
            }
            set
            {
                _Protrude1 = value;
                _sim.SetProtrude1(_Protrude1);
            }
        }
        private bool _Protrude2;
        [IgnorePropertyChange]
        public bool Protrude2
        {
            get
            {
                return _Protrude2;
            }
            set
            {
                _Protrude2 = value;
                _sim.SetProtrude2(_Protrude2);
            }
        }
        private bool _VAC;
        [IgnorePropertyChange]
        public bool VAC
        {
            get
            {
                return _VAC;
            }
            set
            {
                _VAC = value;
                _sim.SetVAC(_VAC);
            }
        }
        private bool _AIR;
        [IgnorePropertyChange]
        public bool AIR
        {
            get
            {
                return _AIR;
            }
            set
            {
                _AIR = value;
                _sim.SetAIR(_AIR);
            }
        }
        private bool _doorOpen1;
        public bool DoorOpen1
        {
            get
            {
                return _doorOpen1;
            }
            set
            {
                _doorOpen1 = value;
                _sim.IsDoorOpen1=value;
            }
        }
        private bool _doorOpen2;
        public bool DoorOpen2
        {
            get
            {
                return _doorOpen2;
            }
            set
            {
                _doorOpen2 = value;
                _sim.IsDoorOpen2 = value;
            }
        }
        private bool _doorOpen3;
        public bool DoorOpen3
        {
            get
            {
                return _doorOpen3;
            }
            set
            {
                _doorOpen3 = value;
                _sim.IsDoorOpen3 = value;
            }
        }
        private SunWayEfemSimulator _sim;
        public ICommand ClearCommand { get; set; }
        public ICommand SetAllCommand { get; set; }
        public ICommand RandomCommand { get; set; }
        public ICommand RandomDummyCommand { get; set; }
        public Simu_SunWayEfemViewModel() : base("SunWayEfemSimuViewModel")
        {
            
            ClearCommand = new DelegateCommand(Clear);
            SetAllCommand = new DelegateCommand(SetAll);
            RandomCommand = new DelegateCommand(RandomGenerateWafer);
            RandomDummyCommand = new DelegateCommand(RandomDummyGenerateWafer);
            _sim = new SunWayEfemSimulator();
            Init(_sim);
        }
        private void RandomGenerateWafer(string obj)
        {
            _sim.RandomWafer();
        }
        private void RandomDummyGenerateWafer(string obj)
        {
            _sim.RandomDummyWafer();
        }
        private void SetAll(string obj)
        {
            _sim.SetAllWafer();
        }
        private void Clear(string obj)
        {
            _sim.ClearWafer();
        }
        private List _WaferSizeItems = new List() { "200", "300"};
        public List WaferSizeItems
        {
            get
            {
                return _WaferSizeItems;
            }
        }
        private string _SelectedWaferSize;
        public string SelectedWaferSize
        {
            get
            {
                return _SelectedWaferSize;
            }
            set
            {
                _SelectedWaferSize = value;
                _sim.WaferSize =int.Parse(value);
            }
        }
    }
}