package de.ivu.elect.sitzberechnung.osv.exchange.p22;

import java.util.Objects;

public class Zuteilung implements ZuteilungInVerteilung {

  private VerteilungTyp verteilungTyp;
  private ZuteilungTyp zuteilungTyp;
  private int schrittnummer;
  private AllgemeineListe verteilungInnerhalbVon;
  private AllgemeineListe verteilungAn;
  private boolean losentscheid;
  private int sitze;
  private int zaehler;
  private int zaehlerVomRest;
  private int nennerVomRest = 1; // verhindert Division durch 0

  public Zuteilung() {
  }

  public Zuteilung(VerteilungTyp verteilungTyp, ZuteilungTyp zuteilungTyp, int schrittnummer,
                   AllgemeineListe verteilungInnerhalbVon,
                   AllgemeineListe verteilungAn, boolean losentscheid, int sitze, int zaehler, int zaehlerVomRest,
                   int nennerVomRest) {
    this.verteilungTyp = verteilungTyp;
    this.zuteilungTyp = zuteilungTyp;
    this.schrittnummer = schrittnummer;
    this.verteilungInnerhalbVon = verteilungInnerhalbVon;
    this.verteilungAn = verteilungAn;
    this.losentscheid = losentscheid;
    this.sitze = sitze;
    this.zaehler = zaehler;
    this.zaehlerVomRest = zaehlerVomRest;
    this.nennerVomRest = nennerVomRest;
  }

  @Override
  public VerteilungTyp getVerteilungTyp() {
    return verteilungTyp;
  }

  public void setVerteilungTyp(VerteilungTyp verteilungTyp) {
    this.verteilungTyp = verteilungTyp;
  }

  public ZuteilungTyp getZuteilungTyp() {
    return zuteilungTyp;
  }

  public void setZuteilungTyp(ZuteilungTyp zuteilungTyp) {
    this.zuteilungTyp = zuteilungTyp;
  }

  public int getSchrittnummer() {
    return schrittnummer;
  }

  public void setSchrittnummer(int schrittnummer) {
    this.schrittnummer = schrittnummer;
  }

  @Override
  public AllgemeineListe getVerteilungInnerhalbVon() {
    return verteilungInnerhalbVon;
  }

  public void setVerteilungInnerhalbVon(AllgemeineListe verteilungInnerhalbVon) {
    this.verteilungInnerhalbVon = verteilungInnerhalbVon;
  }

  @Override
  public AllgemeineListe getVerteilungAn() {
    return verteilungAn;
  }

  public void setVerteilungAn(AllgemeineListe verteilungAn) {
    this.verteilungAn = verteilungAn;
  }

  public void setLosentscheid(boolean losentscheid) {
    this.losentscheid = losentscheid;
  }

  public boolean getLosentscheid() {
    return losentscheid;
  }

  public int getSitze() {
    return sitze;
  }

  public void setSitze(int sitze) {
    this.sitze = sitze;
  }

  public int getZaehler() {
    return zaehler;
  }

  public void setZaehler(int zaehler) {
    this.zaehler = zaehler;
  }

  public int getZaehlerVomRest() {
    return zaehlerVomRest;
  }

  public void setZaehlerVomRest(int zaehlerVomRest) {
    this.zaehlerVomRest = zaehlerVomRest;
  }

  public int getNennerVomRest() {
    return nennerVomRest;
  }

  public void setNennerVomRest(int nennerVomRest) {
    this.nennerVomRest = nennerVomRest;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    Zuteilung zuteilung = (Zuteilung) o;
    return schrittnummer == zuteilung.schrittnummer &&
            losentscheid == zuteilung.losentscheid &&
            sitze == zuteilung.sitze &&
            zaehler == zuteilung.zaehler &&
            zaehlerVomRest == zuteilung.zaehlerVomRest &&
            nennerVomRest == zuteilung.nennerVomRest &&
            verteilungTyp == zuteilung.verteilungTyp &&
            zuteilungTyp == zuteilung.zuteilungTyp &&
            Objects.equals(verteilungInnerhalbVon, zuteilung.verteilungInnerhalbVon) &&
            Objects.equals(verteilungAn, zuteilung.verteilungAn);
  }

  @Override
  public int hashCode() {
    return Objects.hash(verteilungTyp, zuteilungTyp, schrittnummer, verteilungInnerhalbVon, verteilungAn, losentscheid,
            sitze, zaehler, zaehlerVomRest, nennerVomRest);
  }

  @Override
  public String toString() {
    return "Zuteilung{" +
            "verteilungTyp=" + verteilungTyp +
            ", zuteilungTyp=" + zuteilungTyp +
            ", schrittnummer=" + schrittnummer +
            ", verteilungInnerhalbVon=" + verteilungInnerhalbVon +
            ", verteilungAn=" + verteilungAn +
            ", losentscheid=" + losentscheid +
            ", sitze=" + sitze +
            ", zaehler=" + zaehler +
            ", zaehlerVomRest=" + zaehlerVomRest +
            ", nennerVomRest=" + nennerVomRest +
            '}';
  }
}
