using System;
using System.Collections.Generic;
using System.Linq;
using Valg.EVA.Skanning.Contracts;
using Valg.EVA.Skanning.Identity;
using Valg.EVA.Skanning.ServicesModel.ElectionConfig.Model;
using Valg.EVA.Skanning.UserInterfaceElements;
using Valg.EVA.Skanning.JobManagement.Startup.Data;

namespace Valg.EVA.Skanning.JobManagement.Startup.UI.VotingCategories
{
    public class VotingCategoriesViewModel : ViewModelBase
    {
        private readonly IDataModel dataModel;

        public VotingCategoriesViewModel(IDataModel dataModel)
        {
            this.dataModel = dataModel;
            ValidVotingCategories = new List<VotingCategory>();
            LoadData();
        }

        private List<VotingCategory> ValidVotingCategories { get; set; }

        private void LoadData()
        {
            ValidVotingCategories = dataModel.GetValidVotingCategories();
        }

        protected override void SubscribeToViewModelSpecificEvents()
        {
            SubscribeToEvent<SecurityContextHasChangedEvent, EventArgs>(ReloadTabs);
        }

        private void ReloadTabs(EventArgs eventArgs)
        {
            LoadData();
            OnPropertyChanged(null);
        }

        
        
        
        public string TabTitleVotingCategoryFO
        {
            get
            {
                return VotingCategoryType.FO_Forhåndsstemmer.LocaleName();

            }
        }

        
        
        
        public string TabTitleVotingCategoryFS
        {
            get { return VotingCategoryType.FS_SentInnkomne.LocaleName(); }
        }

        
        
        
        public string TabTitleVotingCategoryVB
        {
            get { return VotingCategoryType.VB_Beredskap.LocaleName(); }
        }

        
        
        
        public string TabTitleVotingCategoryVF
        {
            get
            {
                return VotingCategoryType.VF_Fremmedstemmer.LocaleName();
            }
        }

        
        
        
        public string TabTitleVotingCategoryVO
        {
            get { return VotingCategoryType.VO_Valgtingsstemmer.LocaleName(); }
        }

        
        
        
        public string TabTitleVotingCategoryVS
        {
            get
            {
                return VotingCategoryType.VS_SærskiltOmslag.LocaleName(); }
        }

        
        
        
        public string TabTitleVotingCategoryBF
        {
            get { return VotingCategoryType.BF_FremmedstemmerBydelsvalg.LocaleName(); }
        }

        public bool IsCollapsedFO
        {
            get { return ValidVotingCategories.Any(p => p.Code == VotingCategoryKeys.FO_Forhåndsstemmer); }
        }

        public bool IsCollapsedFS
        {
            get { return ValidVotingCategories.Any(p => p.Code == VotingCategoryKeys.FS_SentInnkomne); }
        }

        public bool IsCollapsedVB
        {
            get { return ValidVotingCategories.Any(p => p.Code == VotingCategoryKeys.VB_Beredskap); }
        }

        public bool IsCollapsedVF
        {
            get { return ValidVotingCategories.Any(p => p.Code == VotingCategoryKeys.VF_Fremmedstemmer); }
        }

        public bool IsCollapsedVO
        {
            get { return ValidVotingCategories.Any(p => p.Code == VotingCategoryKeys.VO_Valgtingsstemmer); }
        }

        public bool IsCollapsedVS
        {
            get { return ValidVotingCategories.Any(p => p.Code == VotingCategoryKeys.VS_SærskiltOmslag); }
        }

        public bool IsCollapsedBF
        {
            get { return ValidVotingCategories.Any(p => p.Code == VotingCategoryKeys.BF_FremmedstemmerBydelsvalg); }
        }
    }
}
