
package de.ivu.elect.presentation.personenpruefung.form;

import static de.ivu.elect.jee.entity.EntityUtil.castTo;
import static java.util.Objects.nonNull;
import static org.apache.commons.lang3.StringUtils.isNotBlank;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.wahlvorschlag.entity.EntityMitWahlvorschlag;
import de.ivu.elect.business.wahlvorschlag.entity.ReferendumOption;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;
import de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagConstants;
import de.ivu.elect.jee.presentation.dynamicform.AbstractStringProperty;

public class CorePersonendatenWahlvorschlagProperty extends AbstractStringProperty {

  private final Personendaten personendaten;

  public CorePersonendatenWahlvorschlagProperty(Personendaten personendaten) {
    super();

    this.personendaten = personendaten;
  }

  @Override
  public boolean isReadonly() {
    return true;
  }

  @Override
  public int getDefaultMaxLength() {
    return 0;
  }

  @Override
  public boolean getDefaultRequired() {
    return false;
  }

  @Override
  public String getValue() {
    if (nonNull(personendaten) && personendaten.isInstanceOf(EntityMitWahlvorschlag.class)) {
      return getValueFormatted(castTo(personendaten, EntityMitWahlvorschlag.class).getWahlvorschlag());
    }

    return "";
  }

  public static String getValueFormatted(Wahlvorschlag wahlvorschlag) {
    if (nonNull(wahlvorschlag)) {
      if (wahlvorschlag.isInstanceOf(ReferendumOption.class)) {
        return getValueFormatted(castTo(wahlvorschlag, ReferendumOption.class).getGruppe().getName());
      }

      return getValueFormatted(wahlvorschlag.getKennwort());
    }

    return "";
  }

  private static String getValueFormatted(String bezeichnung) {
    if (isNotBlank(bezeichnung)) {
      return bezeichnung;
    }

    return "";
  }

  @Override
  public void setValue(String value) {
    throw new UnsupportedOperationException("This is NOT implemented!");
  }

  @Override
  public String getDefaultLabel() {
    return getMessage(WahlvorschlagConstants.MESSAGE_KEY_ENTITY_EINZAHL);
  }
}
