"""
automatically invoked app factory
"""
import logging
import os

from flask import Flask

from brian_dashboard_manager import environment
from brian_dashboard_manager import config

CONFIG_KEY = 'CONFIG_PARAMS'


def create_app():
    """
    overrides default settings with those found
    in the file read from env var CONFIG_FILENAME

    :return: a new flask app instance
    """

    required_env_vars = ['CONFIG_FILENAME']

    assert all([n in os.environ for n in required_env_vars]), \
        'environment variables %r must be defined' % required_env_vars

    app_config = config.defaults()
    if 'CONFIG_FILENAME' in os.environ:
        with open(os.environ['CONFIG_FILENAME']) as f:
            app_config.update(config.load(f))

    app = Flask(__name__)
    app.secret_key = os.environ.get('SECRET_KEY', 'super secret session key')
    app.config[CONFIG_KEY] = app_config

    from brian_dashboard_manager.routes import update, version
    app.register_blueprint(update.routes, url_prefix='/update')
    app.register_blueprint(version.routes, url_prefix='/version')

    logging.info('Flask app initialized')
    environment.setup_logging()
    return app