from flask import Flask
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
from flask_cors import CORS
import json
import bugsnag
from bugsnag.flask import handle_exceptions
import os

from applications.routes import emi_api
from applications.no_touch import no_touch_api
from emi_containers import EMIContainer
from app import CoreApp
import config

bugsnag.configure(
  api_key=config.BUGSNAG_KEY,
  project_root=os.getcwd() + "/emi_app",
)

app = Flask(__name__)
handle_exceptions(app)
app.config['SECRET_KEY'] = config.SECRET_KEY
emi_container = EMIContainer()
app.container = emi_container
core_container = CoreApp()
app.container = core_container
limiter = Limiter(
    get_remote_address,
    app=app,
    storage_uri="memory://",
    default_limits=["60/minutes"]
)
app.register_blueprint(emi_api)
app.register_blueprint(no_touch_api)
CORS(app, supports_credentials=True, origins=config.domain)


if __name__ == '__main__':
    app.run(host=config.host, port=config.port)
