using StammGenerator;
using StammGenerator.Enum;
using StammGenerator.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StammGenerator.ViewModel.Factories
{
    public class MainWindowViewModelFactory : IViewModelAbstractFactory
    {
        private CreateViewModel<HomeViewModel> _createHomeViewModel;
        private CreateViewModel<ManholeEditViewModel> _createManholeEditViewModel;
        private CreateViewModel<ManholeListViewModel> _createManholeListViewModel;
        private CreateViewModel<HaltungListViewModel> _createHaltungListViewModel;
        //private CreateViewModel<SewerConnectorViewModel> _createSewerConnectorViewModel;
        private CreateViewModel<ProjektListViewModel> _createProjektListViewModel;
        private CreateViewModel<AuftraggeberListViewModel> _createAuftraggeberListViewModel;

        public MainWindowViewModelFactory(
            CreateViewModel<HomeViewModel> createHomeViewModel,
            CreateViewModel<ManholeEditViewModel> createManholeEditViewModel,
            CreateViewModel<ManholeListViewModel> createManholeListViewModel,
            CreateViewModel<HaltungListViewModel> createHaltungListViewModel,
            
            CreateViewModel<ProjektListViewModel> createProjektListViewModel,
            CreateViewModel<AuftraggeberListViewModel> createAuftraggeberListViewModel
            )
        {
            _createHomeViewModel = createHomeViewModel;
            _createManholeEditViewModel = createManholeEditViewModel;
            //_createSewerConnectorViewModel = createSewerConnectorViewModel;
            _createProjektListViewModel = createProjektListViewModel;
            _createManholeListViewModel = createManholeListViewModel;
            _createHaltungListViewModel = createHaltungListViewModel;
            _createAuftraggeberListViewModel = createAuftraggeberListViewModel;
        }

        public BaseViewModel CreateViewModel(EMainWindowViewType viewType)
        {
            switch(viewType)
            {
                case EMainWindowViewType.Home: return _createHomeViewModel();

                case EMainWindowViewType.SchachtList: return _createManholeListViewModel();
                case EMainWindowViewType.SchachtEdit: return _createManholeEditViewModel();

                case EMainWindowViewType.HaltungList: return _createHaltungListViewModel();
                //case EMainWindowViewType.SewerConnectionEdit: return _createSewerConnectorViewModel();

                case EMainWindowViewType.ProjectList: return _createProjektListViewModel();

                case EMainWindowViewType.AuftraggeberList: return _createAuftraggeberListViewModel();

                default:
                    throw new NotImplementedException();
            }
        }
    }
}
