package com.airlock.iam.system.config;

import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.Optional;

public enum ConfigFormat {
   XML_FORMAT("xml"),
   YAML_FORMAT("yaml");

   private final String identifier;

   public static Optional<ConfigFormat> formatFromPath(Path configPath) {
      String stringPath = configPath.toString();
      if (stringPath.endsWith(".xml")) {
         return Optional.of(XML_FORMAT);
      } else {
         return !stringPath.endsWith(".yaml") && !stringPath.endsWith(".yml") ? Optional.empty() : Optional.of(YAML_FORMAT);
      }
   }

   public static ConfigFormat parseConfigFormat(String format) {
      if (format == null) {
         throw new IllegalStateException("Plugin config format type not specified.");
      } else {
         return Arrays.stream(values())
            .filter(env -> env.getIdentifier().equals(format))
            .findFirst()
            .orElseThrow(() -> new IllegalStateException("Invalid format type provided: " + format));
      }
   }

   @SuppressFBWarnings(justification = "generated code")
   ConfigFormat(final String identifier) {
      this.identifier = identifier;
   }

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