import os
import os.path

import yaml
import jinja2

QUAYPATH = os.getenv("QUAYPATH", ".")
QUAYDIR = os.getenv("QUAYDIR", "/")
QUAYCONF_DIR = os.getenv("QUAYCONF", os.path.join(QUAYDIR, QUAYPATH, "conf"))
STATIC_DIR = os.path.join(QUAYDIR, 'static')

def write_config(filename, **kwargs):
  with open(filename + ".jnj") as f:
    template = jinja2.Template(f.read())
  rendered = template.render(kwargs)

  with open(filename, 'w') as f:
    f.write(rendered)


def generate_nginx_config():
  """
  Generates nginx config from the app config
  """
  use_https = os.path.exists(os.path.join(QUAYCONF_DIR, 'stack/ssl.key'))
  write_config(os.path.join(QUAYCONF_DIR, 'nginx/nginx.conf'), use_https=use_https)


def generate_server_config(config):
  """
  Generates server config from the app config
  """
  config = config or {}
  tuf_server = config.get('TUF_SERVER', None)
  tuf_host = config.get('TUF_HOST', None)
  signing_enabled = config.get('FEATURE_SIGNING', False)
  maximum_layer_size = config.get('MAXIMUM_LAYER_SIZE', '20G')

  write_config(
    os.path.join(QUAYCONF_DIR, 'nginx/server-base.conf'), tuf_server=tuf_server, tuf_host=tuf_host,
    signing_enabled=signing_enabled, maximum_layer_size=maximum_layer_size, static_dir=STATIC_DIR)


if __name__ == "__main__":
  if os.path.exists(os.path.join(QUAYCONF_DIR, 'stack/config.yaml')):
    with open(os.path.join(QUAYCONF_DIR, 'stack/config.yaml'), 'r') as f:
      config = yaml.load(f)
  else:
    config = None
  generate_server_config(config)
  generate_nginx_config()