"""Interfaces to read the liquidctl version.

Copyright Jonas Malaco and contributors
SPDX-License-Identifier: GPL-3.0-or-later
"""

# uses the psf/black style


# keep setuptools_scm parameters in sync with pyproject.toml
_SETUPTOOLS_SCM_PARAMS = {"version_scheme": "release-branch-semver"}


def _build_version():
    try:
        from liquidctl._version import version, version_tuple

        return (version, version_tuple)
    except ModuleNotFoundError:
        return None


def _runtime_version():
    try:
        from setuptools_scm import get_version
    except ModuleNotFoundError:
        return None

    # first, assume that we're a git checkout
    try:
        version = get_version(**_SETUPTOOLS_SCM_PARAMS)
        if version:
            return (version, None)
    except LookupError:
        pass

    # if that also failed, assume that we're a tarball
    try:
        guess = get_version(parentdir_prefix_version="liquidctl-", **_SETUPTOOLS_SCM_PARAMS)
        if guess:
            if "+" in guess:
                guess += "-guessed"
            else:
                guess += "+guessed"
            return (guess, None)
    except LookupError:
        pass

    return None


# - try to get the version written by setuptools_scm during the build;
# - otherwise try to compute one right now;
# - failing that too, use an obviously invalid value
#
# (_version_tuple is kept private as it's only available in some cases and
# don't want to commit to it yet)
version, _version_tuple = _build_version() or _runtime_version() or ("0.0.0-unknown", None)

# old field name (liquidctl.__version__ is preferred now)
__version__ = version
