
package de.ivu.elect.business.sitzberechnung.control.varianten;

import de.ivu.elect.business.ergebnis.entity.Gewaehlt;
import de.ivu.elect.jee.entity.customdata.CustomData;
import de.ivu.elect.jee.entity.customdata.EmptyCustomData;

public class GewaehlteVergleicher extends AbstractVergleicher<Gewaehlt> {

  @Override
  boolean isGleich(Gewaehlt x, Gewaehlt y) {
    if (!x.getRang().equals(y.getRang())) {
      return false;
    }
    if (!x.getGewaehltStatus().equals(y.getGewaehltStatus())) {
      return false;
    }
    return isGleich(x.getCustomData(), y.getCustomData());
  }

  private boolean isGleich(CustomData x, CustomData y) {
    if (x == EmptyCustomData.INSTANCE) {
      if (y == EmptyCustomData.INSTANCE) {
        return true;
      } else {
        return false;
      }
    } else {
      if (y == EmptyCustomData.INSTANCE) {
        return false;
      } else {
        return x.equals(y);
      }
    }
  }

  @Override
  public Gewaehlt getMergedValue(int erwarteteAnzahlVerglichenerWerte) {
    Gewaehlt mergedValue = super.getMergedValue(erwarteteAnzahlVerglichenerWerte);
    if (mergedValue != null) {
      return mergedValue;
    }

    mergedValue = werte.iterator().next();
    mergedValue.setToLosentscheidOffen();

    return mergedValue;
  }
}
