// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

package com.android.tools.r8;

import static com.android.tools.r8.ToolHelper.isWindows;

import java.nio.file.Path;
import java.nio.file.Paths;

public enum ProguardVersion {
  V5_2_1("5.2.1"),
  V6_0_1("6.0.1"),
  V7_0_0("7.0.0");

  private final String version;

  ProguardVersion(String version) {
    this.version = version;
  }

  public static ProguardVersion getLatest() {
    return V7_0_0;
  }

  public Path getProguardScript() {
    return isWindows()
        ? getScriptDirectory().resolve("proguard.bat")
        : getScriptDirectory().resolve("proguard.sh");
  }

  public Path getRetraceScript() {
    return isWindows()
        ? getScriptDirectory().resolve("retrace.bat")
        : getScriptDirectory().resolve("retrace.sh");
  }

  private Path getScriptDirectory() {
    Path scriptDirectory = Paths.get(ToolHelper.THIRD_PARTY_DIR).resolve("proguard");
    if (this == V7_0_0) {
      scriptDirectory = scriptDirectory.resolve("proguard-" + version).resolve("bin");
    } else {
      scriptDirectory = scriptDirectory.resolve("proguard" + version).resolve("bin");
    }
    return scriptDirectory;
  }

  public String getVersion() {
    return version;
  }

  @Override
  public String toString() {
    return "Proguard " + version;
  }
}
