using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using Caliburn.Micro;
using Caliburn.Micro.Core;
namespace RecipeEditorLib.RecipeModel.Params
{
    public abstract class Param : PropertyChangedBase
    {
        public Action Feedback { get; set; }
        public Func Check { get; set; }
        public ObservableCollection Parent { get; set; }
        private string name;
        public string Name
        {
            get { return this.name; }
            set
            {
                this.name = value;
                this.NotifyOfPropertyChange("Name");
            }
        }
        private string _displayName;
        public string DisplayName
        {
            get { return this._displayName; }
            set
            {
                this._displayName = value;
                this.NotifyOfPropertyChange("DisplayName");
            }
        }
        private bool isEnabled;
        public bool IsEnabled
        {
            get
            {
                return this.isEnabled;
            }
            set
            {
                this.isEnabled = value;
                this.NotifyOfPropertyChange("IsEnabled");
            }
        }
        private bool isSaved;
        public bool IsSaved
        {
            get { return this.isSaved; }
            set
            {
                this.isSaved = value;
                this.NotifyOfPropertyChange("IsSaved");
            }
        }
        private bool _IsColumnSelected;
        public bool IsColumnSelected
        {
            get { return this._IsColumnSelected; }
            set
            {
                this._IsColumnSelected = value;
                this.NotifyOfPropertyChange("IsColumnSelected");
            }
        }
        private Visibility visibility;
        public Visibility Visible
        {
            get { return this.visibility; }
            set
            {
                this.visibility = value;
                this.NotifyOfPropertyChange("Visible");
            }
        }
        public bool EnableConfig { get; set; }
        public bool EnableTolerance { get; set; }
        public Visibility StepCheckVisibility { get; set; }
        public Param()
        {
            this.IsSaved = true;
            isEnabled = true;
        }
    }
}