// Path: src/main/java/io/arivera/oss/embedded/rabbitmq/util/ArchiveType.java
// public enum ArchiveType {
// 
//   TAR_GZ, TAR_XZ, ZIP;
// 
//   public String getExtension() {
//     return name().toLowerCase(Locale.US).replace("_", ".");
//   }
// 
//   public boolean matches(String filesname) {
//     return filesname.endsWith(getExtension());
//   }
// }
// 
// Path: src/main/java/io/arivera/oss/embedded/rabbitmq/util/OperatingSystem.java
// public enum OperatingSystem {
// 
//   WINDOWS, MAC_OS, UNIX;
// 
//   /**
//    * Returns the right instance of the Operation System.
//    *
//    * @see SystemUtils#IS_OS_MAC
//    * @see SystemUtils#IS_OS_WINDOWS
//    */
//   public static OperatingSystem detect() {
//     if (SystemUtils.IS_OS_MAC) {
//       return MAC_OS;
//     } else if (SystemUtils.IS_OS_WINDOWS) {
//       return WINDOWS;
//     } else {
//       return UNIX;
//     }
//   }
// 
// }


import io.arivera.oss.embedded.rabbitmq.util.ArchiveType;
import io.arivera.oss.embedded.rabbitmq.util.OperatingSystem;
import java.util.List;
package io.arivera.oss.embedded.rabbitmq;



/**
 * A class that represents the RabbitMQ Version that is downloaded from the {@link SingleArtifactRepository}.
 * <p>
 * The only thing we care about from the custom download artifact is the folder name where the RabbitMQ installation
 * can be found. We don't care about the version number, the Erlang version required, etc.
 */
class UnknownVersion implements Version {

  private final String appFolderName;

  public UnknownVersion(String appFolderName) {
    this.appFolderName = appFolderName;
  }

  @Override
  public String getExtractionFolder() {
    return appFolderName;
  }

  @Override
  public String getMinimumErlangVersion() {
    return ErlangVersion.UNKNOWN;
  }

  @Override
  public String getVersionAsString() {
    throw new RuntimeException("This value isn't needed for custom downloads.");
  }

  @Override
  public String getVersionAsString(CharSequence separator) {
    throw new RuntimeException("This value isn't needed for custom downloads.");
  }

  @Override
// Path: src/main/java/io/arivera/oss/embedded/rabbitmq/util/ArchiveType.java
// public enum ArchiveType {
// 
//   TAR_GZ, TAR_XZ, ZIP;
// 
//   public String getExtension() {
//     return name().toLowerCase(Locale.US).replace("_", ".");
//   }
// 
//   public boolean matches(String filesname) {
//     return filesname.endsWith(getExtension());
//   }
// }
// 
// Path: src/main/java/io/arivera/oss/embedded/rabbitmq/util/OperatingSystem.java
// public enum OperatingSystem {
// 
//   WINDOWS, MAC_OS, UNIX;
// 
//   /**
//    * Returns the right instance of the Operation System.
//    *
//    * @see SystemUtils#IS_OS_MAC
//    * @see SystemUtils#IS_OS_WINDOWS
//    */
//   public static OperatingSystem detect() {
//     if (SystemUtils.IS_OS_MAC) {
//       return MAC_OS;
//     } else if (SystemUtils.IS_OS_WINDOWS) {
//       return WINDOWS;
//     } else {
//       return UNIX;
//     }
//   }
// 
// }


// Path: src/main/java/io/arivera/oss/embedded/rabbitmq/UnknownVersion.java
import io.arivera.oss.embedded.rabbitmq.util.ArchiveType;
import io.arivera.oss.embedded.rabbitmq.util.OperatingSystem;
import java.util.List;

package io.arivera.oss.embedded.rabbitmq;



/**
 * A class that represents the RabbitMQ Version that is downloaded from the {@link SingleArtifactRepository}.
 * <p>
 * The only thing we care about from the custom download artifact is the folder name where the RabbitMQ installation
 * can be found. We don't care about the version number, the Erlang version required, etc.
 */
class UnknownVersion implements Version {

  private final String appFolderName;

  public UnknownVersion(String appFolderName) {
    this.appFolderName = appFolderName;
  }

  @Override
  public String getExtractionFolder() {
    return appFolderName;
  }

  @Override
  public String getMinimumErlangVersion() {
    return ErlangVersion.UNKNOWN;
  }

  @Override
  public String getVersionAsString() {
    throw new RuntimeException("This value isn't needed for custom downloads.");
  }

  @Override
  public String getVersionAsString(CharSequence separator) {
    throw new RuntimeException("This value isn't needed for custom downloads.");
  }

  @Override
  public ArchiveType getArchiveType(OperatingSystem operatingSystem) {