
package de.ivu.elect.was.exchange.ergebnis.dokumente.util;

import java.math.BigDecimal;

import javax.annotation.Nullable;

/**
 * Utility-Klasse zum Addieren und Subtrahieren von Long- und BigDecimal-Werte, die auch null sein können. Dabei ist
 * immer null + x = x + null = x.
 */
public class WahlbuchNumberUtil {

  @Nullable
  public static Long addLongNull(@Nullable Long long1, @Nullable Long long2) {
    if (long1 == null) {
      return long2;
    }
    if (long2 == null) {
      return long1;
    }
    return long1 + long2;
  }

  public static Long subtractLongNull(@Nullable Long long1, @Nullable Long long2) {
    if (long2 == null) {
      return long1;
    }
    if (long1 == null) {
      return -long2;
    }
    return long1 - long2;
  }

  /**
   * Diese Methode mit Vorsicht verwenden. Nach Möglichkeit keine gerundeten Werte addieren, siehe ELECT-4543
   */
  public static BigDecimal addBigDecimalNull(BigDecimal bigDecimal1, BigDecimal bigDecimal2) {
    if (bigDecimal2 == null) {
      return bigDecimal1;
    }
    if (bigDecimal1 == null) {
      return bigDecimal2;
    }
    return bigDecimal1.add(bigDecimal2);
  }

  /**
   * Diese Methode mit Vorsicht verwenden. Nach Möglichkeit keine gerundeten Werte subtrahieren, siehe ELECT-4543
   */
  public static BigDecimal subtractBigDecimalNull(BigDecimal bigDecimal1, BigDecimal bigDecimal2) {
    if (bigDecimal2 == null) {
      return bigDecimal1;
    }
    if (bigDecimal1 == null) {
      return bigDecimal2.multiply(new BigDecimal(-1));
    }
    return bigDecimal1.subtract(bigDecimal2);
  }
}
