package de.gecheckt.pdf.umbenenner.bootstrap;

/**
 * Liest die Anwendungsversion aus dem MANIFEST.MF des ausführbaren Fat-JARs.
 * <p>
 * Im gepackten Betrieb wird der Eintrag {@code Implementation-Version} aus dem
 * JAR-Manifest gelesen, der beim Build durch das Shade-Plugin befüllt wird.
 * Im IDE-Betrieb und in Testumgebungen ohne gepacktes JAR steht kein Manifest
 * zur Verfügung; in diesem Fall wird der Fallback {@code "dev"} zurückgegeben.
 * <p>
 * Diese Klasse ist eine reine Hilfsklasse ohne Zustand; alle Methoden sind statisch.
 * Die Verdrahtung mit der GUI-Statuszeile erfolgt in einer späteren Ausbaustufe.
 */
public final class ApplicationVersionProvider {

    /** Fallback-Version, wenn kein Manifest-Eintrag verfügbar ist. */
    private static final String FALLBACK_VERSION = "dev";

    /** Utility-Klasse – kein öffentlicher Konstruktor. */
    private ApplicationVersionProvider() {
        // nicht instanziierbar
    }

    /**
     * Gibt die Anwendungsversion zurück.
     * <p>
     * Die Version wird aus dem {@code Implementation-Version}-Eintrag des Pakets
     * {@code de.gecheckt.pdf.umbenenner.bootstrap} gelesen. Dieser Eintrag wird
     * beim Build durch das Shade-Plugin mit dem Wert der Property {@code ${revision}}
     * befüllt.
     * <p>
     * Ist der Eintrag nicht vorhanden (IDE-Start, Tests, ungepackter Betrieb),
     * wird der Wert {@code "dev"} zurückgegeben.
     *
     * @return die aufgelöste Versionsnummer, niemals {@code null}
     */
    public static String resolveVersion() {
        String version = ApplicationVersionProvider.class.getPackage().getImplementationVersion();
        if (version == null) {
            // Fallback für IDE-Start und ungepackten Betrieb
            return FALLBACK_VERSION;
        }
        return version;
    }
}
