package com.airlock.iam.system.version;

import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.List;
import java.util.Optional;

public enum ConfigSchemaVersion {
   UNDEFINED_SCHEMA("UNDEFINED"),
   XML_CONFIG_SCHEMA("XML"),
   YAML_CONFIG_SPEC_8_4("iam.airlock.com/v1"),
   YAML_CONFIG_SPEC_8_6("iam.airlock.com/v1.1");

   private static final List<ConfigSchemaVersion> KNOWN_YAML_SCHEMA_VERSIONS = List.of(YAML_CONFIG_SPEC_8_4, YAML_CONFIG_SPEC_8_6);
   private final String versionString;

   ConfigSchemaVersion(String versionString) {
      this.versionString = versionString;
   }

   public static ConfigSchemaVersion fromString(String versionString) {
      return retrieveMatchingVersion(versionString).orElseThrow(() -> new IllegalArgumentException("Unknown schema version: " + versionString));
   }

   public static boolean isValidVersion(String versionString) {
      return retrieveMatchingVersion(versionString).isPresent();
   }

   private static Optional<ConfigSchemaVersion> retrieveMatchingVersion(String versionString) {
      return KNOWN_YAML_SCHEMA_VERSIONS.stream().filter(knownVersion -> versionString.trim().equals(knownVersion.versionString)).findFirst();
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getVersionString() {
      return this.versionString;
   }
}
