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

import java.util.Date;
import java.util.EnumSet;
import java.util.Optional;

// https://www1.osci.de/meldewesen/xmeld-2827
public enum XmeldVersion implements PersonenregisterVersion {

  /**
   * @deprecated
   * @see XmeldVersion >= 3.0
   */
  @Deprecated
  V_24("01.11.2018"),
  /**
   * @deprecated
   * @see XmeldVersion >= 3.0
   */
  @Deprecated
  V_241("01.05.2019"),
  /**
   * @deprecated
   * @see XmeldVersion >= 3.0
   */
  @Deprecated
  V_244("01.05.2021"),
  /**
   * @deprecated
   * @see XmeldVersion >= 3.0
   */
  @Deprecated
  V_245("01.11.2021"),

  V_30("01.05.2022"),
  V_31("01.11.2022"),
  V_32("01.05.2023"),
  V_33("01.11.2023"),

  ;

  private Optional<Date> gueltigAb;

  XmeldVersion(String gueltigAbDdMMyyyy) {
    this.gueltigAb = Optional.ofNullable(PersonenregisterVersion.parseDate(gueltigAbDdMMyyyy));
  }

  @Override
  public Optional<Date> getGueltigAb() {
    return gueltigAb;
  }

  public static XmeldVersion getDefault() {
    return PersonenregisterVersion.getValueGueltigOrDefault(EnumSet.allOf(XmeldVersion.class), XmeldVersion.V_31);
  }
}
