
package de.ivu.elect.business.stimmeingabe.control.validierung;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;

import de.ivu.elect.business.stimmeingabe.entity.Ergebniseingang;
import de.ivu.elect.business.stimmeingabe.entity.Ergebniseingangsart;
import de.ivu.elect.business.wahl.boundary.WahldurchfuehrungDAO;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahldurchfuehrung;
import de.ivu.elect.jee.exception.ElectCommonException;
import de.ivu.elect.jee.faces.Messages;

@RequestScoped // ELECTBB-19 - Instanzen bleiben sonst beim automatischen Stimmenimport im Speicher...
public class ErgebniseingangEingabeMitWahldurchfuehrungErgebniseingangsartValidator implements ErgebniseingangValidator {

  private static final String MESSAGE_KEY_FALSCHE_EINGANGSART = "stimmeingabe.erfassen.pruefen.eingabe.falsche.eingangsart";

  @Inject
  private transient Messages messages;

  @Inject
  private transient WahldurchfuehrungDAO wahldurchfuehrungDAO;

  public ErgebniseingangEingabeMitWahldurchfuehrungErgebniseingangsartValidator() {
    super();
  }

  @Override
  public boolean isSpecificPerWahldurchfuehrungErgebniseingangsart() {
    return true;
  }

  @Override
  public void validate(Ergebniseingang ergebniseingang) {
    // ELECTKOM-27
    if (ergebniseingang.isOverrideErgebniseingangsart()) {
      return;
    }
    Wahl wahl = ergebniseingang.getWahldurchfuehrungsgebiet().getWahl();
    Wahldurchfuehrung wahldurchfuehrung = wahldurchfuehrungDAO.findByPrimaryKey(wahl.getPk());

    Ergebniseingangsart wahldurchfuehrungErgebniseingangsart = wahldurchfuehrung.getErgebniseingangsart();
    Ergebniseingangsart ergebniseingangErgebniseingangsart = ergebniseingang.getErgebniseingangsart();

    if (!wahldurchfuehrungErgebniseingangsart.equals(ergebniseingangErgebniseingangsart)) {
      throw new ElectCommonException(ElectCommonException.RedirectDestination.NONE, MESSAGE_KEY_FALSCHE_EINGANGSART,
          messages.lokalisiere(ergebniseingangErgebniseingangsart), messages.lokalisiere(wahldurchfuehrungErgebniseingangsart));
    }
  }
}
