using SewerStammGen.Shared.Contracts;
using SewerStammGen.Shared.Domain;
using SewerStammGen.WPF.Interface.Navigator;
using SewerStammGen.WPF.ViewModel.State;
using Shared.Contracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace SewerStammGen.WPF.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 RechtsWert
        {
            get => _model.RechtsWert;
            set
            {
                if(_model.RechtsWert  != value)
                {
                    _model.RechtsWert = value;
                    OnPropertyChanged();
                }
            }
        }
        public decimal HochWert
        {
            get => _model.HochWert; set
            {
                if (_model.HochWert != value)
                {
                    _model.HochWert = value;
                    OnPropertyChanged();
                }
            }
        }
        public decimal DeckelHoehe
        {
            get => _model.DeckelHoehe;
            set
            {
                if (_model.DeckelHoehe != value)
                {
                    _model.DeckelHoehe = value;
                    OnPropertyChanged();
                }
            }
        }
        public decimal SohlHoehe
        {
            get => _model.SohlHoehe;
            set
            {
                if (_model.SohlHoehe != value)
                {
                    _model.SohlHoehe = value;
                    OnPropertyChanged();
                }
            }
        }
        public EEntwaeserung Entwaeserung
        {
            get => _model.Entwaesserung;
            set
            {
                if (_model.Entwaesserung != value)
                {
                    _model.Entwaesserung = value;
                    OnPropertyChanged();
                }
            }
        }

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

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

        }

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