package de.ivu.elect.presentation.wahl.menu;

import java.util.Collections;
import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.stimmeingabe.boundary.ErgebniseingangExtendedDAO;
import de.ivu.elect.business.wahl.boundary.WahlSessionSelect;
import de.ivu.elect.business.wahl.entity.NlWahlCustomData;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.presentation.menu.AbstractMenuItemEntry;
import de.ivu.elect.presentation.security.AbstractGebietSecurity;
import de.ivu.elect.presentation.wahl.NlBackupRestoreView;
import de.ivu.elect.presentation.wahl.NlBackupStatus;

public abstract class AbstractNlBackupRestoreMenuItemEntry extends AbstractMenuItemEntry {
  private static final long serialVersionUID = 1L;

  @Inject
  protected transient WahlSessionSelect wahlSessionSelect;

  @Inject
  protected transient NlBackupStatus nlBackupStatus;

  @Inject
  private transient ErgebniseingangExtendedDAO ergebniseingangExtendedDAO;

  @Override
  protected boolean isDisabledInternal() {
    return !wahlSessionSelect.isSelected() || (!nlBackupStatus.isBackupRestoreFreigeschaltet() && isErgebniseingangEingangVorhanden());
  }

  @Override
  protected AbstractGebietSecurity getGebietSecurity() {
    return AbstractGebietSecurity.KEINE_GEBIET_SECURITY;
  }

  @Override
  public boolean isRendered() {
    return hasUseCasePermission(UseCasePermission.CUSTOMER_2) && isBackupRestoreVorgesehen();
  }

  private boolean isBackupRestoreVorgesehen() {
    Wahl entity = wahlSessionSelect.getEntity();
    if (entity == null) {
      return false;
    }
    return true; // ELECT-11355
    // return NlWahlart.isWasGemeinde(() -> entity.getWurzelgebiet(EntityMitWurzelgebietDAO.fromDao(gebietExtendedDAO)), currentCustomer.getCustomer());
  }

  @Override
  public String getLabelKey() {
    if (nlBackupStatus.isBackupRestoreFreigeschaltet()) {
      return "backup.restore.freischalten.lock.menu.item";
    }
    return "backup.restore.freischalten.menu.item";
  }

  @Override
  public String getIcon() {
    if (nlBackupStatus.isBackupRestoreFreigeschaltet()) {
      return getIcons().getIconLock();
    }
    return getIcons().getIconUnlock();
  }



  private boolean isErgebniseingangEingangVorhanden() {
    Wahl entity = wahlSessionSelect.getEntity();
    return entity != null && isErgebniseingangVorhanden(entity);
  }

  private boolean isErgebniseingangVorhanden(Wahl wahl) {
    return ergebniseingangExtendedDAO.findByCountWahl(wahl) > 0;
  }

  @Override
  protected List<String> getAdditionalTopicViewIds() {
    return Collections.singletonList(NlBackupRestoreView.VIEW_ID);
  }
}
