# Definition of the version number
import os
from io import open as io_open

__all__ = ["__version__"]

# major, minor, patch, -extra
version_info = 4, 51, 0

# Nice string for the version
__version__ = '.'.join(map(str, version_info))


# auto -extra based on commit hash (if not tagged as release)
scriptdir = os.path.dirname(__file__)
gitdir = os.path.abspath(os.path.join(scriptdir, "..", ".git"))
if os.path.isdir(gitdir):  # pragma: nocover
    try:
        extra = None
        # Open config file to check if we are in tqdm project
        with io_open(os.path.join(gitdir, "config"), 'r') as fh_config:
            if 'tqdm' in fh_config.read():
                # Open the HEAD file
                with io_open(os.path.join(gitdir, "HEAD"), 'r') as fh_head:
                    extra = fh_head.readline().strip()
                # in a branch => HEAD points to file containing last commit
                if 'ref:' in extra:
                    # reference file path
                    ref_file = extra[5:]
                    branch_name = ref_file.rsplit('/', 1)[-1]

                    ref_file_path = os.path.abspath(os.path.join(
                        gitdir, ref_file))
                    # check that we are in git folder
                    # (by stripping the git folder from the ref file path)
                    if os.path.relpath(ref_file_path, gitdir).replace(
                            '\\', '/') != ref_file:
                        # out of git folder
                        extra = None
                    else:
                        # open the ref file
                        with io_open(ref_file_path, 'r') as fh_branch:
                            commit_hash = fh_branch.readline().strip()
                            extra = commit_hash[:8]
                            if branch_name != "master":
                                extra += '.' + branch_name

                # detached HEAD mode, already have commit hash
                else:
                    extra = extra[:8]

        # Append commit hash (and branch) to version string if not tagged
        if extra is not None:
            with io_open(os.path.join(gitdir, "refs", "tags",
                                      'v' + __version__)) as fdv:
                if fdv.readline().strip()[:8] != extra[:8]:
                    __version__ += '-' + extra
    except Exception as e:
        if "No such file" in str(e):
            __version__ += "-git.UNKNOWN"
        else:
            raise
