import os
import re
import subprocess

from util.config.provider import get_config_provider


ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
CONF_DIR = os.getenv("QUAYCONF", os.path.join(ROOT_DIR, "conf/"))
STATIC_DIR = os.path.join(ROOT_DIR, 'static/')
STATIC_LDN_DIR = os.path.join(STATIC_DIR, 'ldn/')
STATIC_FONTS_DIR = os.path.join(STATIC_DIR, 'fonts/')
TEMPLATE_DIR = os.path.join(ROOT_DIR, 'templates/')

IS_TESTING = 'TEST' in os.environ
IS_KUBERNETES = 'KUBERNETES_SERVICE_HOST' in os.environ
OVERRIDE_CONFIG_DIRECTORY = os.path.join(CONF_DIR, 'stack/')


config_provider = get_config_provider(OVERRIDE_CONFIG_DIRECTORY, 'config.yaml', 'config.py',
                                      testing=IS_TESTING, kubernetes=IS_KUBERNETES)


def _get_version_number_changelog():
  try:
    with open(os.path.join(ROOT_DIR, 'CHANGELOG.md')) as f:
      return re.search(r'(v[0-9]+\.[0-9]+\.[0-9]+)', f.readline()).group(0)
  except IOError:
    return ''


def _get_git_sha():
  if os.path.exists("GIT_HEAD"):
    with open(os.path.join(ROOT_DIR, "GIT_HEAD")) as f:
      return f.read()
  else:
    try:
      return subprocess.check_output(["git", "rev-parse", "HEAD"]).strip()[0:8]
    except (OSError, subprocess.CalledProcessError):
      pass
  return "unknown"


__version__ = _get_version_number_changelog()
__gitrev__ = _get_git_sha()