using SewerStammGen.Shared.Contracts;
using SewerStammGen.Shared.Domain;
using StammGenerator.Commands;
using StammGenerator.Interface;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows.Input;

namespace StammGenerator.ViewModel
{
    public class HaltungListViewModel : BaseViewModel
    {
        private readonly ObservableCollection<Kanal> _haltungen;
        private readonly IActualState _actualState;
        private readonly IHaltungDataService _haltungDataService;
        
        public Kanal? SelectedHaltung { get; set; }
        public ObservableCollection<Kanal> Haltungen { get => _haltungen; }

        public ICommand EditCommand { get; set; }
        public ICommand AddCommand { get; set; }

        public HaltungListViewModel(IHaltungDataService haltungDataService, IActualState actualState, IRenavigator renavigator )
        {
            _haltungen = new ObservableCollection<Kanal>();
            _haltungDataService = haltungDataService;

            _actualState = actualState;
            

            EditCommand = new HaltungEditCommand(actualState, renavigator, this);
            AddCommand = new HaltungAddCommand(actualState, renavigator);
            

            LoadHaltungen();
        }

        private async void LoadHaltungen()
        {
            var haltungen = await _haltungDataService.GetAllByProjekt(_actualState.ProjektID);
            InitCollection(_haltungen, haltungen);
           
        }

        private void InitCollection(ObservableCollection<Kanal> dest, IEnumerable<Kanal> source)
        {
            dest.Clear();
            foreach (var sourceItem in source)
            {
                dest.Add(sourceItem);
            }
        }
    }
}
