import logging

from app import app as application
from data.model import db as model_db

# Initialize logging
application.config['LOGGING_CONFIG']()

# Turn off debug logging for boto
logging.getLogger('boto').setLevel(logging.CRITICAL)

from endpoints.api import api
from endpoints.index import index
from endpoints.web import web
from endpoints.tags import tags
from endpoints.registry import registry
from endpoints.webhooks import webhooks
from endpoints.realtime import realtime
from endpoints.callbacks import callback


logger = logging.getLogger(__name__)

application.register_blueprint(web)
application.register_blueprint(callback, url_prefix='/oauth2')
application.register_blueprint(index, url_prefix='/v1')
application.register_blueprint(tags, url_prefix='/v1')
application.register_blueprint(registry, url_prefix='/v1')
application.register_blueprint(api, url_prefix='/api')
application.register_blueprint(webhooks, url_prefix='/webhooks')
application.register_blueprint(realtime, url_prefix='/realtime')


def close_db(exc):
  db = model_db
  if not db.is_closed():
    logger.debug('Disconnecting from database.')
    db.close()

application.teardown_request(close_db)


# Remove this for prod config
application.debug = True

if __name__ == '__main__':
  application.run(port=5000, debug=True, threaded=True, host='0.0.0.0')