
package de.ivu.elect.business.stimmeingabe.entity;

import java.util.Optional;

import de.ivu.elect.business.ergebnis.entity.Stimmenart;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.gruppe.entity.NlSystemGruppe;
import de.ivu.elect.business.gruppe.entity.SystemGruppe;

public class NlDefaultListenwahlStimmeingabeGruppeStimmenErfassenModel extends StimmeingabeGruppeStimmenErfassenModel {

  private static final SystemGruppe BLANKO = NlSystemGruppe.BLANKO.getSystemGruppe();

  public NlDefaultListenwahlStimmeingabeGruppeStimmenErfassenModel(Wahldurchfuehrungsgebiet bezugGebiet) {
    super(bezugGebiet);
  }

  public boolean hasStimmenGruppeBlanko() {
    return getStimmenGruppeBlanko() != null;
  }

  public <T extends StimmeingabeGruppeStimmen> T getStimmenGruppeBlanko() {
    return getStimmenSystemGruppe(BLANKO);
  }

  public Optional<Stimmeingabe> getStimmeingabeGruppeBlankoDirektstimmen() {
    return getStimmeingabeSystemGruppeDirektstimme(BLANKO);
  }

  public Optional<Stimmeingabe> getStimmeingabeGruppeBlankoListenstimmen() {
    return getStimmeingabeSystemGruppeListenstimme(BLANKO);
  }

  public void setStimmenSystemGruppe(NlSystemGruppe nlSystemGruppe, Stimmenart stimmenart, StimmeingabeGruppeStimmen stimmeingabeGruppeStimmen) {
    SystemGruppe systemGruppe = nlSystemGruppe.getSystemGruppe();

    if (!nlSystemGruppe.getStimmenarten().contains(stimmenart)) {
      throw new IllegalArgumentException("Stimmenart NICHT unterstuetzt [nlSystemGruppe = " + nlSystemGruppe + ", systemGruppe = " + systemGruppe + ", stimmenart = " + stimmenart + "]");
    }

    if (SystemGruppe.UEBRIGE.equals(systemGruppe)) { // Nur eine StimmeingabeGruppeStimmen (mit Direkt- und Listenstimme) per Systemgruppe unterstützt!
      setStimmenSystemGruppe(systemGruppe, stimmeingabeGruppeStimmen);
    } else {
      throw new IllegalArgumentException("Systemgruppe NICHT unterstützt [nlSystemGruppe = " + nlSystemGruppe + ", systemGruppe = " + systemGruppe + ", stimmenart = " + stimmenart + "]");
    }
  }
}
