package de.ivu.elect.business.wahl.control;

import java.util.List;
import java.util.stream.Collectors;

import javax.inject.Inject;

import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.system.control.status.AbstractSystemStatusOptionResolver;
import de.ivu.elect.business.system.control.status.SystemStatusOption;
import de.ivu.elect.business.system.entity.SystemStatusOptionGroup;
import de.ivu.elect.business.wahl.entity.WahlPK;
import de.ivu.elect.jee.presentation.status.StatusEntry;
import de.ivu.elect.jee.presentation.status.StatusOptionType;

public class WahlGebietsartSystemStatusOptionResolver extends AbstractSystemStatusOptionResolver {

  private static final StatusOptionType WAHLART_SYSTEMGEBIETSEBENE = new StatusOptionType() {

    private static final long serialVersionUID = 1L;

    @Override
    public String toString() {
      return "WAHLART_SYSTEMGEBIETSEBENE";
    }
  };

  @Inject
  private transient WahlGebietsartSystemStatusHelper wahlGebietsartSystemStatusHelper;

  @Override
  public SystemStatusOptionGroup getSystemStatusOptionGroup() {
    return SystemStatusOptionGroup.CONTENT;
  }

  @Override
  protected StatusEntry resolveSystemStatusOption(SystemStatusOption systemStatusOption) {
    WahlPK wahlPK = (WahlPK) systemStatusOption.getPayload();

    if (wahlGebietsartSystemStatusHelper.pruefe(wahlPK)) {
      return ok("wahl.gebietart.systemebene.passt", wahlGebietsartSystemStatusHelper.getOkParams(wahlPK));
    }
    return error("wahl.gebietart.systemebene.passt.nicht", wahlGebietsartSystemStatusHelper.getErrorParams(wahlPK));
  }

  @Override
  protected boolean isAccept(Mandant mandant) {
    return mandant.getArt().isCustomerMandant();
  }

  @Override
  protected List<SystemStatusOption> getStatusOptionsInternal(Mandant mandant) {
    return wahlGebietsartSystemStatusHelper.getWahlenFuerMandant(mandant).stream().map(pk -> new SystemStatusOption(WAHLART_SYSTEMGEBIETSEBENE, pk, mandant))
        .collect(
            Collectors.toList());
  }
}
