using SewerStammGen.Shared.Contracts;
using SewerStammGen.Shared.Domain;
using SewerStammGen.Shared.Enum;
using StammGenerator.Interface;
using System.Windows.Input;

namespace StammGenerator.ViewModel
{
    public class ManholeEditViewModel : BaseViewModel
    {
        private readonly ISchachtDataService _schachtDataService;
        private readonly IRenavigator _renavigator;

        private Schacht _model;

        public ICommand Speichern { get; set; }

        public string Objektbezeichnung
        {
            get
            {
                return _model.Objektbezeichnung;
            }
            set
            {
                if(_model.Objektbezeichnung != value)
                {
                    _model.Objektbezeichnung = value;
                    OnPropertyChanged();
                }
            }
        }
        public decimal DeckelRechtsWert
        {
            get => _model.DeckelRechtsWert;
            set
            {
                if(_model.DeckelRechtsWert  != value)
                {
                    _model.DeckelRechtsWert = value;
                    OnPropertyChanged();
                }
            }
        }
        public decimal DeckelHochWert
        {
            get => _model.DeckelHochWert; set
            {
                if (_model.DeckelHochWert != value)
                {
                    _model.DeckelHochWert = value;
                    OnPropertyChanged();
                }
            }
        }
        public decimal DeckelHoehe
        {
            get => _model.DeckelHoehe;
            set
            {
                if (_model.DeckelHoehe != value)
                {
                    _model.DeckelHoehe = value;
                    OnPropertyChanged();
                }
            }
        }
        public decimal SohlHochWert
        {
            get => _model.SohlHochWert;
            set
            {
                if(_model.SohlHochWert != value)
                {
                    _model.SohlHochWert = value;
                    OnPropertyChanged();
                }
            }
        }
        public decimal SohlRechtsWert
        {
            get => _model.SohlRechtsWert;
            set
            {
                if(_model.SohlRechtsWert != value)
                {
                    _model.SohlRechtsWert = value;
                    OnPropertyChanged();
                }
            }
        }
        public decimal SohlHoehe
        {
            get => _model.SohlHoehe;
            set
            {
                if (_model.SohlHoehe != value)
                {
                    _model.SohlHoehe = value;
                    OnPropertyChanged();
                }
            }
        }
        public string Vermesser
        {
            get => _model.Vermesser;
            set
            {
                if(_model.Vermesser != value)
                {
                    _model.Vermesser = value;
                    OnPropertyChanged();
                }
            }
        }
        public string AufnahmeDatum
        {
            get => _model.AufnahmeDatum;
            set
            {
                if(_model.AufnahmeDatum != value)
                {
                    _model.AufnahmeDatum = value;
                    OnPropertyChanged();
                }
            }
        }
        public EEntwaeserung Entwaeserung
        {
            get => _model.Entwaesserung;
            set
            {
                if (_model.Entwaesserung != value)
                {
                    _model.Entwaesserung = value;
                    OnPropertyChanged();
                }
            }
        }

        public ESchachtType SchachtType
        {
            get => _model.SchachtType;
            set
            {
                if(_model.SchachtType != value)
                {
                    _model.SchachtType = value;
                    OnPropertyChanged();
                }
            }
        }

        public ManholeEditViewModel(ISchachtDataService schachtDataService,IActualState actualState, IRenavigator renavigator)
        {
            _schachtDataService = schachtDataService;
            _model = actualState.SelectedSchacht;
            _renavigator = renavigator;

            Speichern = new RelayCommand((x) => SaveSchacht());

        }

        public ManholeEditViewModel()
        {
            
        }

        private async void SaveSchacht()
        {
            if (_model.Id == 0)
            {
                await _schachtDataService.Create(_model);
            }
            else
            {
               await _schachtDataService.Update(_model);
            }
            _renavigator.Renavigate();
        }
    }
}
