using System.ComponentModel;

namespace KoloryWPF.ModelWidoku
{
    using Model;
    using System.Windows.Input;

    class EdycjaKoloru : INotifyPropertyChanged
    {
        private Kolor model = Ustawienia.Czytaj();

        public byte R
        {
            get
            {
                return model.R;
            }
            set
            {
                model.R = value;
                OnPropertyChanged(nameof(R));
            }
        }

        public byte G
        {
            get
            {
                return model.G;
            }
            set
            {
                model.G = value;
                OnPropertyChanged(nameof(G));
            }
        }

        public byte B
        {
            get
            {
                return model.B;
            }
            set
            {
                model.B = value;
                OnPropertyChanged(nameof(B));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged(params string[] nazwyWłasności)
        {
            if (PropertyChanged != null)
            {
                foreach (string nazwaWłasności in nazwyWłasności)
                    PropertyChanged(this, new PropertyChangedEventArgs(nazwaWłasności));
            }
        }

        private ICommand resetujCommand = null;

        private void execute(object p)
        {
            model.R = 0;
            model.G = 0;
            model.B = 0;
        }

        public ICommand Resetuj
        {
            get
            {
                //Lazy initiaton - odroczone (leniwe) inicjowanie
                //if (resetujCommand == null) resetujCommand = new PolecenieResetowania(model, OnPropertyChanged);
                if (resetujCommand == null) resetujCommand = new RelayCommand(
                    //execute,
                    (object p) =>
                    {
                        model.R = 0;
                        model.G = 0;
                        model.B = 0;
                        OnPropertyChanged(nameof(R), nameof(G), nameof(B));
                    },
                    (object p) =>
                    {
                        return model.R != 0 || model.G != 0 || model.B != 0;
                    }
                    );
                return resetujCommand;
            }
        }

        private ICommand zapiszCommand;

        public ICommand Zapisz
        {
            get
            {
                if (zapiszCommand == null) zapiszCommand = new RelayCommand(
                     (object p) =>
                     {
                         Ustawienia.Zapisz(model);
                     });
                return zapiszCommand;
            }
        }
    }
}
