/*
 * ElectionResult
 *
 * Created on 18.03.2009
 * Copyright (c) 2009 IVU Traffic Technologies AG
 */
package de.ivu.wahl.result.result;

import de.ivu.wahl.result.Candidate;
import de.ivu.wahl.result.determination.P2List;
import de.ivu.wahl.result.drawlots.Decision;

import java.util.List;
import java.util.Map;
import java.util.SortedMap;

/**
 * Using this interface test cases may find out about the details of the determination of the
 * election result.
 *
 * @author , IVU Traffic Technologies AG
 */
public interface ElectionResult {

  /**
   * @return Display the receiver as tab separated table to create an easy overview of all assignments
   */
  String asTable();

  long getNumberOfVotes();

  long getNumberOfSeats();

  long getPreferentialBarrierInPercent();

  boolean isMustExceedPreferentialBarrier();

  List<Candidate> getElectedCandidates();

  List<CandidateResult> getCandidateResultsElectedHere();

  List<Assignment> getAssignments();

  SortedMap<AssignmentKey, AssignmentValue> getAssignmentsSorted();

  Map<P2List, List<Candidate>> getOldListPositions();

  Map<P2List, List<Candidate>> getNewListPositions();

  Map<P2List, Long> getTotalSeatsAssigned();

  Decision getConflict();

  List<DHondtSeatDistribution> getDHondtSeatDistributions();

  List<SubDistribution> getSubDistributions();

  List<Anomaly> getAnomaliesToBePublishedInP22();
}
