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

import de.ivu.elect.business.gebietsbaum.entity.EntityMitGebiet;
import de.ivu.elect.business.gruppe.entity.EntityMitGruppe;
import de.ivu.elect.business.konfiguration.entity.CustomParameter;
import de.ivu.elect.business.wahl.entity.Wahl;
import org.apache.commons.lang3.StringUtils;

import java.util.Collection;

import javax.annotation.Nullable;
import javax.validation.constraints.Null;


import static java.util.Arrays.asList;

public abstract class AbstractStimmzettelKopfdatum implements StimmzettelKopfdatumBase, EntityMitGruppe, EntityMitGebiet, CustomParameter<StimmzettelKopfdatumArt> {
  private static final long serialVersionUID = 1L;

  @Override
  public boolean hasGruppe() {
    return getGruppe() != null;
  }


  @Override
  public Collection<StimmzettelKopfdatumArt> getTemplates() {
    return asList(StimmzettelKopfdatumArt.values());
  }

  @Override
  public String getKey() {
    return getSchluessel();
  }

  @Override
  public void setKey(String key) {
    setSchluessel(key);
  }

  public StimmzettelKopfdatumArt getStimmzettelKopfdatumArt() {
    return getTemplate().orElse(null /*cannot happen*/); // immer vorhanden
  }

  public long parseWertAsLong() {
    String wert = getWert();
    if (StringUtils.isBlank(wert)) {
      return 0;
    }
    try {
      return Long.parseLong(wert);
    } catch (Exception e) {
      return 0;
    }
  }
  @Nullable
  public Long parseWertAsLongOrNull() {
    String wert = getWert();
    if (StringUtils.isBlank(wert)) {
      return null;
    }
    try {
      return Long.parseLong(wert);
    } catch (Exception e) {
      return null;
    }
  }

  public Wahl getWahl() {
    return getGebiet().getWahl();
  }

  public boolean isExportieren() {
    return !getStimmzettelKopfdatumArt().isBerechneterWert() || getGruppe() != null;
  }
}
