using Earthblend.Nts.Common;
using Earthblend.Tts.Common.Core;
using Earthblend.Tts.Common.Core.Enumerations;
using System;

namespace Earthblend.Tts.Common.Core.Members
{
    public class TargetDefinition : CustomBindableBase
    {
        #region Constructor(s)

        public TargetDefinition()
        {

        }

        #endregion

        #region Private Variables

        private String _targetField;
        private Guid _targetId = Guid.Empty;
        private TargetType _type = TargetType.Object3D;
        private TargetSequence _applyTarget = TargetSequence.After;
        private Guid _virtualEquationElementId = Guid.Empty;
        private Boolean _isVirtual = false;
        private int _virtualIndex = 0;
        private String _virtualVariable = "";
        private Object _virtualResult = 0.0D;
        private String _meshType = "Unknown";
        private Guid _equationId = Guid.Empty;
        private Guid _nodeId = Guid.Empty;
        private String _source = String.Empty;

        #endregion

        #region Public Clr Properties

        public String Source { get { return _source; } set { SetProperty(ref _source, value); } }
        public Guid NodeId { get { return _nodeId; } set { SetProperty(ref _nodeId, value); } }
        public Guid EquationId { get { return _equationId; } set { SetProperty(ref _equationId, value); } }
        public Object VirtualResult { get { return _virtualResult; } set { SetProperty(ref _virtualResult, value); } }
        public String VirtualVariable { get { return _virtualVariable; } set { SetProperty(ref _virtualVariable, value); } }
        public int VirtualIndex { get { return _virtualIndex; } set { SetProperty(ref _virtualIndex, value); } }
        public Boolean IsVirtual { get { return _isVirtual; } set { SetProperty(ref _isVirtual, value); } }
        public Guid VirtualEquationElementId { get { return _virtualEquationElementId; } set { SetProperty(ref _virtualEquationElementId, value); } }
        public String TargetField { get { return _targetField; } set { SetProperty(ref _targetField, value); } }
        public String MeshType { get { return _meshType; } set { SetProperty(ref _meshType, value); } }
        public Guid TargetId { get { return _targetId; } set { SetProperty(ref _targetId, value); } }
        public TargetType Type { get { return _type; } set { SetProperty(ref _type, value); } }
        public TargetSequence ApplyTarget { get { return _applyTarget; } set { SetProperty(ref _applyTarget, value); } }

        #endregion
    }
}