using System.Collections.Generic;
using System.Collections.ObjectModel;
using Valg.EVA.Skanning.ServicesModel.ServiceContracts.Box.Read;
using Valg.EVA.Skanning.ServicesModel.ServiceContracts.Box.Write;
using Valg.EVA.Skanning.ServicesModel.ServiceContracts.Box.Write.EmptyBox;
using Valg.EVA.Skanning.ServicesModel.ServiceContracts.Count.Read;
using Valg.EVA.Skanning.ServicesModel.ServiceContracts.Count.Write;
using Valg.EVA.Skanning.ServicesModel.ServiceContracts.JobManage.Write;
using Valg.EVA.Skanning.ServicesModel.ServiceContracts.Scan.Write;

namespace Valg.EVA.Skanning.Services.Count
{
    public interface ICountingService
    {
        DeleteBoxCountingAndReregisterForScanningResult DeleteBoxCountingAndReregisterForScanning(DeleteBoxCountingAndReregisterForScanningParameters parameters);
        List<Counting> GetCountings(string electionEventId, string contestId, string countingEmlAreaContextId);
        List<BoxCountingDetails> GetBoxCountingDetails(string electionEventId, string contestId, string countingEmlAreaContextId);
        Counting GetCountingByBoxCountingId(int boxCountingId);
        Counting GetCounting(int countingId);
        DeleteCountingResult DeleteCounting(DeleteCountingParameters parameters);
        RegisterBoxAsEmptyResult RegisterBoxAsEmpty(RegisterBoxAsEmptyParameters parameters);
        ReadOnlyCollection<DuplicateBallot> GetDuplicateBallots(int countingId);
        ResolveLockedBallotsResult ResolveLockedBallots(int boxCountingId, string changedBy, bool isInEmergencyMode);
        void StartPreliminaryCounting(StartCountingParameters startCountingParameters);
        void StartFinalCounting(StartCountingParameters startCountingParameters);
        GetLockedBallotsResult GetLockedBallots(int boxCountingId);
        ResolveDuplicatesInCountingResult ResolveDuplicatesInCounting(ResolveDuplicatesInCountingParameters parameters);
    }
}
