using MwFramework.Controls.UIControl;
using MwFramework.ManagerService;
using Stylet;
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MainShell.ParaSetting.Model
{
    [Export(typeof(IParameter))]
    public class EquipmentParaSysSetting : ParameterBase
    {
        public SafeParaSysItem SafeParaSysItem { get; set; }=new SafeParaSysItem();

        public override void Copy(IParameter source)
        {
            if(source is EquipmentParaSysSetting equipmentParaSys)
            {
                ReflectionExtension.Copy(this.SafeParaSysItem, equipmentParaSys.SafeParaSysItem);
            }
        }
    }

    public class SafeParaSysItem : PropertyChangedBase, IParameterItem
    {
        private double _z1GeneralSafeHeight = 200.0;
        [WatchValue("Z1通用安全高度")]
        public double Z1GeneralSafeHeight
        {
            get { return _z1GeneralSafeHeight; }
            set { SetAndNotify(ref _z1GeneralSafeHeight, value); }
        }

        private double _z3GeneralSafeHeight = 200.0;
        [WatchValue("Z3通用安全高度")]
        public double Z3GeneralSafeHeight
        {
            get { return _z3GeneralSafeHeight; }
            set { SetAndNotify(ref _z3GeneralSafeHeight, value); }
        }

        private double _z4GeneralSafeHeight = 200.0;
        [WatchValue("Z4通用安全高度")]
        public double Z4GeneralSafeHeight
        {
            get { return _z4GeneralSafeHeight; }
            set { SetAndNotify(ref _z4GeneralSafeHeight, value); }
        }

        private double _z5GeneralSafeHeight = 200.0;
        [WatchValue("Z5通用安全高度")]
        public double Z5GeneralSafeHeight
        {
            get { return _z5GeneralSafeHeight; }
            set { SetAndNotify(ref _z5GeneralSafeHeight, value); }
        }

        private double _z6GeneralSafeHeight = 200.0;
        [WatchValue("Z6通用安全高度")]
        public double Z6GeneralSafeHeight
        {
            get { return _z6GeneralSafeHeight; }
            set { SetAndNotify(ref _z6GeneralSafeHeight, value); }
        }

        private double _z1InRingSafeHeight = 200.0;
        [WatchValue("Z1环内最低安全高度")]
        public double Z1InRingSafeHeight
        {
            get
            {
                return _z1InRingSafeHeight;
            }
            set
            {
                SetAndNotify(ref _z1InRingSafeHeight, value);
            }
        }

        private double _z1OutRingSafeHeight = 100.0;
        [WatchValue("Z1环外最低安全高度")]
        public double Z1OutRingSafeHeight
        {
            get
            {
                return _z1OutRingSafeHeight;
            }
            set
            {
                SetAndNotify(ref _z1OutRingSafeHeight, value);
            }
        }

        private double _z1OnRingSafeHeight = 100.0;
        [WatchValue("Z1环上最低安全高度")]
        public double Z1OnRingSafeHeight
        {
            get
            {
                return _z1OnRingSafeHeight;
            }
            set
            {
                SetAndNotify(ref _z1OnRingSafeHeight, value);
            }
        }

        private double _z3OutRingSafeHeight = 100.0;
        [WatchValue("Z3环外最低安全高度")]
        public double Z3OutRingSafeHeight
        {
            get
            {
                return _z3OutRingSafeHeight;
            }
            set
            {
                SetAndNotify(ref _z3OutRingSafeHeight, value);
            }
        }

        private double _z4OutRingSafeHeight = 100.0;
        [WatchValue("Z4环外最低安全高度")]
        public double Z4OutRingSafeHeight
        {
            get
            {
                return _z4OutRingSafeHeight;
            }
            set
            {
                SetAndNotify(ref _z4OutRingSafeHeight, value);
            }
        }

        private double _z5OutRingSafeHeight = 100.0;
        [WatchValue("Z5环外最低安全高度")]
        public double Z5OutRingSafeHeight
        {
            get
            {
                return _z5OutRingSafeHeight;
            }
            set
            {
                SetAndNotify(ref _z5OutRingSafeHeight, value);
            }
        }

        private double _z6OutRingSafeHeight = 100.0;
        [WatchValue("Z6环外最低安全高度")]
        public double Z6OutRingSafeHeight
        {
            get
            {
                return _z6OutRingSafeHeight;
            }
            set
            {
                SetAndNotify(ref _z6OutRingSafeHeight, value);
            }
        }

        private double _needleReferenceX1X3Max = 100.0;
        [WatchValue("刺晶头基准X1-X3最大值")]
        public double NeedleReferenceX1X3Max
        {
            get { return _needleReferenceX1X3Max; }
            set { SetAndNotify(ref _needleReferenceX1X3Max, value); }
        }

        private double _needleReferenceX1X3Min = 0.0;
        [WatchValue("刺晶头基准X1-X3最小值")]
        public double NeedleReferenceX1X3Min
        {
            get { return _needleReferenceX1X3Min; }
            set { SetAndNotify(ref _needleReferenceX1X3Min, value); }
        }

        private double _positionLightReferenceX1X3Max = 100.0;
        [WatchValue("定位光源基准X1-X3最大值")]
        public double PositionLightReferenceX1X3Max
        {
            get { return _positionLightReferenceX1X3Max; }
            set { SetAndNotify(ref _positionLightReferenceX1X3Max, value); }
        }

        private double _positionLightReferenceX1X3Min = 0.0;
        [WatchValue("定位光源基准X1-X3最小值")]
        public double PositionLightReferenceX1X3Min
        {
            get { return _positionLightReferenceX1X3Min; }
            set { SetAndNotify(ref _positionLightReferenceX1X3Min, value); }
        }

        private double _wideFieldLightX2X3Max = 100.0;
        [WatchValue("大视野光源X2-X3最大值")]
        public double WideFieldLightX2X3Max
        {
            get { return _wideFieldLightX2X3Max; }
            set { SetAndNotify(ref _wideFieldLightX2X3Max, value); }
        }

        private double _wideFieldLightX2X3Min = 0.0;
        [WatchValue("大视野光源X2-X3最小值")]
        public double WideFieldLightX2X3Min
        {
            get { return _wideFieldLightX2X3Min; }
            set { SetAndNotify(ref _wideFieldLightX2X3Min, value); }
        }

        private double _wsInnerRingRadius = 0.0;
        [WatchValue("WS内环半径")]
        public double WsInnerRingRadius
        {
            get { return _wsInnerRingRadius; }
            set { SetAndNotify(ref _wsInnerRingRadius, value); }
        }

        private double _needleRadius = 0.0;
        [WatchValue("刺晶头半径")]
        public double NeedleRadius
        {
            get { return _needleRadius; }
            set { SetAndNotify(ref _needleRadius, value); }
        }

        private double _needleCalibSafeHeight;
        [WatchValue("刺晶头对刀安全高度")]
        public double NeedleCalibSafeHeight
        {
            get { return _needleCalibSafeHeight; }
            set { SetAndNotify(ref _needleCalibSafeHeight, value); }
        }


        public IParameterItem Clone()
        {
            return this.MemberwiseClone() as IParameterItem;
        }
    }
}
