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

import static java.util.Objects.nonNull;

import java.util.Objects;

import de.ivu.elect.business.gruppe.entity.GruppeTK;
import de.ivu.elect.jee.faces.Messages;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;

public class GruppeStimmenAnteilComparedToVorperiodeSchwellwert
    implements
      StimmeingabePlausiKonfigurationCustomDataKategorieKomplexerTyp {

  private Long id;

  private GruppeTK gruppeTK;

  private Double untererSchwellwert = null;

  private Double obererSchwellwert = null;

  private GruppeStimmenAnteilComparedToVorperiodeSchwellwertTyp schwellwertTyp = GruppeStimmenAnteilComparedToVorperiodeSchwellwertTyp.PROZENTPUNKTE;

  public GruppeStimmenAnteilComparedToVorperiodeSchwellwert(Long id) {
    this.id = id;
  }

  public GruppeStimmenAnteilComparedToVorperiodeSchwellwert(GruppeTK gruppeTK) {
    this.gruppeTK = gruppeTK;
  }

  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public GruppeTK getGruppeTK() {
    return gruppeTK;
  }

  public void setGruppeTK(GruppeTK gruppeTK) {
    this.gruppeTK = gruppeTK;
  }

  public Double getUntererSchwellwert() {
    return untererSchwellwert;
  }

  public void setUntererSchwellwert(Double untererSchwellwert) {
    this.untererSchwellwert = untererSchwellwert;
  }

  public Double getObererSchwellwert() {
    return obererSchwellwert;
  }

  public void setObererSchwellwert(Double obererSchwellwert) {
    this.obererSchwellwert = obererSchwellwert;
  }

  public GruppeStimmenAnteilComparedToVorperiodeSchwellwertTyp getSchwellwertTyp() {
    return schwellwertTyp;
  }

  public void setSchwellwertTyp(GruppeStimmenAnteilComparedToVorperiodeSchwellwertTyp schwellwertTyp) {
    this.schwellwertTyp = schwellwertTyp;
  }

  @Override
  public String formatParameterValue(StimmeingabePlausiKonfigurationPropertyContext context) {
    if (nonNull(gruppeTK) || nonNull(untererSchwellwert) || nonNull(obererSchwellwert)) {
      Messages messages = context.getMessages();
      String schluesselFormatted = messages
          .getMessageForMessageKey("GruppeStimmenAnteilComparedToVorperiodeSchwellwert.format.value.kein.gruppe.tk");
      if (nonNull(gruppeTK)) {
        schluesselFormatted = context.getGruppeSchluesselFormatter().formatSchluessel(gruppeTK.getSchluessel());
      }
      return messages.getMessageForMessageKey("GruppeStimmenAnteilComparedToVorperiodeSchwellwert.format.value",
          schluesselFormatted, untererSchwellwert, obererSchwellwert);
    }
    return "";
  }

  @Override
  public int hashCode() {
    return new HashCodeBuilder(17, 31) //
        .append(id) //
        .append(gruppeTK) //
        .append(untererSchwellwert) //
        .append(obererSchwellwert) //
        .append(schwellwertTyp) //
        .toHashCode();
  }

  @Override
  public boolean equals(Object obj) {
    if (!(obj instanceof GruppeStimmenAnteilComparedToVorperiodeSchwellwert)) {
      return false;
    }
    if (obj == this) {
      return true;
    }
    GruppeStimmenAnteilComparedToVorperiodeSchwellwert other = (GruppeStimmenAnteilComparedToVorperiodeSchwellwert) obj;
    return new EqualsBuilder() //
        .append(id, other.id) //
        .append(gruppeTK, other.gruppeTK) //
        .append(untererSchwellwert, other.untererSchwellwert) //
        .append(obererSchwellwert, other.obererSchwellwert) //
        .append(schwellwertTyp, other.schwellwertTyp) //
        .isEquals();
  }

  @Override
  public String toString() {
    return "GruppeStimmenAnteilComparedToVorperiodeSchwellwert[id=" + id + ", gruppeTK=" + gruppeTK + ", schwellwerTyp="
        + schwellwertTyp + ", untererSchwellwert=" + untererSchwellwert + ", obererSchwellwert=" + obererSchwellwert + "]";
  }
}
