package de.ivu.elect.presentation.gebietsbaum.table;

import de.ivu.elect.business.CurrentCustomer;
import de.ivu.elect.business.gebietsbaum.boundary.GebietExtendedDAO;
import de.ivu.elect.business.gebietsbaum.entity.AbstractGebiet;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.NlGebietCustomData;
import de.ivu.elect.business.wahl.entity.NlWahlart;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;

public class NlWasGebietPublicKeyVorhandenColumn extends AbstractGebietColumn<Gebiet> {

  private static final long serialVersionUID = 1L;

  public NlWasGebietPublicKeyVorhandenColumn(Messages messages, GebietExtendedDAO gebietExtendedDAO, CurrentCustomer currentCustomer) {
    super("Nl-Was-Gebiet-Public-Key-Vorhanden-Column", messages, "gebiet.public.key.vorhanden.column", ColumnType.BOOLEAN, gebiet -> {
      if (gebiet.isErfassungsgebiet() || NlWahlart.isWasHSBC(gebiet.getWahl(), currentCustomer.getCustomer())) {
        return gebiet.getCustomData(NlGebietCustomData.class).isPublicKeyValid();
      }

      var wahl = gebiet.getWahl();

      if (wahl == null) {
        return false;
      }

      // ELECTVAPP-1174
      return gebietExtendedDAO.findByWahl(wahl).stream().filter(AbstractGebiet::isErfassungsgebiet)
          .allMatch(g -> g.getCustomData(NlGebietCustomData.class).isPublicKeyValid());
    });
  }
}
