using System.Collections.ObjectModel;
using Valg.EVA.Skanning.ServicesModel.ServiceContracts.Count.Read;
using Valg.EVA.Skanning.ServicesModel.ServiceContracts.Verification.Read;
using Valg.EVA.Skanning.UserInterfaceElements;
using Valg.EVA.Skanning.Verify.Startup.Preview;
using Valg.EVA.Skanning.Verify.Startup.VerifyBallotPaper.BallotNumber;
using Valg.EVA.Skanning.Verify.Startup.VerifyBallotPaper.BallotPaperStatus;
using Valg.EVA.Skanning.Verify.Startup.VerifyBallotPaper.BallotPaperXOfY;
using Valg.EVA.Skanning.Verify.Startup.VerifyBallotPaper.Candidate;
using Valg.EVA.Skanning.Verify.Startup.VerifyBallotPaper.Header;
using Valg.EVA.Skanning.Verify.Startup.VerifyBallotPaper.VerifiableViewModelsCollection;
using Valg.EVA.Skanning.Verify.Startup.VerifyBallotPaper.PageXOfY;
using Valg.EVA.Skanning.Verify.Startup.VerifyBallotPaper.RenumberStrikeout;
using Valg.EVA.Skanning.Verify.Startup.VerifyBallotPaper.Stamp;
using Valg.EVA.Skanning.Verify.Startup.VerifyBallotPaper.WriteModel;

namespace Valg.EVA.Skanning.Verify.Startup.VerifyBallotPaper
{
    public interface IVerifyBallotPaperViewModel : IViewModelBase
    {
        ObservableCollection<CandidateViewModel> AllCandidates { get; }
        ObservableCollection<RenumberStrikeoutViewModel> RenumberStrikeouts { get; }
        IVerifiableViewModelsCollectionVisitor VerifiableViewModelsCollectionVisitor { get; }
        IPageXOfYViewModel PageXOfYViewModel { get; }
        IBallotPaperStatusViewModel BallotPaperStatusViewModel { get; }
        IBallotPaperXOfYViewModel BallotPaperXOfYViewModel { get; }
        IStampVerificationPageViewModel StampVerificationPageViewModel { get; }
        IPreviewViewModel Preview { get; }
        IBallotNumberViewModel BallotNumberViewModel { get; }
        IAffiliationHeaderViewModel AffiliationHeaderViewModel { get; }
        BallotPaper BallotPaper { get; set; }
        Counting Counting { get; set; }
        BallotPageCollection BallotPages { get; }

        void AddCandidateViewModel(CandidateViewModel candidateViewModel);
        void AddRenumberStrikeoutViewModel(RenumberStrikeoutViewModel renumberStrikeoutViewModel);
        void AddBallotPage(IPagedVerificationViewModel viewModel, PageXOfYNavigationTooltip tooltip, PreviewBallotPaperImageViewModel previewViewModel);
        void RemoveBallotNumberDependentBallotPages();

        bool HasBallotCompleteTipBeenShown { get; set; }
        IWriteModelHub WriteModelHub { get; }
        void ClearRenumberStrikeouts();
        void ClearCandidates();
        void UpdateViewModel(BallotNumberUpdate ballotNumberUpdate);
        void Initialize(BallotPaper ballotPaperToVerify, Counting counting, int totalToVerification);
    }
}

