/*
  This is a part of Angry IP Scanner source.
 */
package net.azib.ipscan.config;

import java.util.jar.JarFile;
import java.util.logging.Level;

/**
 * Class with accessors to version information of the program.
 *
 * @author Anton Keks
 */
public class Version {
	public static final String NAME = "Angry IP Scanner";
	
	public static final String COPYLEFT = "© 2025 Anton Keks and contributors";
	
	public static final String OWN_HOST = "angryip.org";

	public static final String WEBSITE = "https://" + OWN_HOST;

	public static final String FAQ_URL = WEBSITE + "/faq/";

	public static final String PRIVACY_URL = WEBSITE + "/about/privacy.html";

	public static final String FULL_LICENSE_URL = "https://www.gnu.org/licenses/gpl-2.0.html";

	public static final String PLUGINS_URL = WEBSITE + "/contribute/plugins.html";
	
	public static final String DOWNLOAD_URL = WEBSITE + "/download/";

	public static final String ISSUES_URL = WEBSITE + "/issues/";

	public static final String IP_LOCATE_URL = WEBSITE + "/iplocate";

	public static final String LATEST_VERSION_URL = WEBSITE + "/ipscan/IPSCAN.VERSION";

	public static final String GA_ID = "G-2F94QVQFGE";
	public static final String GA_SECRET = "KzBPI2oaSAWo1v5X5TIG8Q";

	private static String version;
	private static String buildDate;
	
	/**
	 * @return version of currently running Angry IP Scanner (retrieved from the jar file)
	 */
	public static String getVersion() {
		if (version == null) {
			loadVersionFromJar();
		}
		return version;
	}
	
	/**
	 * @return build date of currently running Angry IP Scanner  (retrieved from the jar file)
	 */
	public static String getBuildDate() {
		if (buildDate == null) {
			loadVersionFromJar();
		}
		return buildDate;
	}

	private static void loadVersionFromJar() {
		try {
			var path = Version.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
			if (path.endsWith(".jar") || path.endsWith(".exe")) {
				var jarFile = new JarFile(path);
				var attrs = jarFile.getManifest().getMainAttributes();
				version = attrs.getValue("Version");
				buildDate = attrs.getValue("Build-Date");
				return;
			}
		}
		catch (Exception e) {
			LoggerFactory.getLogger().log(Level.WARNING, "Cannot obtain version", e);
		}
		version = "current";
		buildDate = "today";
	}
	
	public static String getFullName() {
		return NAME + " " + getVersion();
	}
}
