
from flask import Flask 
from flask_mail import Mail
from flask_restx import Api
from flask_pymongo import PyMongo 
from flask_jwt_extended import JWTManager


from app.config import Config 

from app.routes.api.v1.auth import auth_namespace
from app.routes.api.health import health_namespace

# Add the token to the Swagger documentation
authorizations = {
    'Bearer Token': {
        'type': 'apiKey',
        'in': 'header',
        'name': 'Authorization',
        'description': "Type in the *'Value'* input box below: **'Bearer &lt;JWT&gt;'**, where JWT is the token"
    }
}
  
# Initialize the api object
api = Api(
    title='Auth Service API',
    description='Authentication API',
    version='1.0',
    terms_url='/terms/',
    license='MIT License',
    license_url='/license/',
    contact='SanoaMedia Solution',
    contact_email='sanoa_media@gmail.com',
    authorizations=authorizations,
    prefix='/api/v1/'
)


# Initialize extensions 
jwt = JWTManager() 
# mongo = PyMongo()


def create_app():
    app = Flask(__name__)
    app.config.from_object(Config)
    # mongo.init_app(app)
    jwt.init_app(app)
    mail = Mail(app)
    
    api.init_app(app)
    api.add_namespace(auth_namespace)
    api.add_namespace(health_namespace)

    return app
