from flask import Flask

from app.config.settings import Config
from app.config.extensions import api, db
from flask_jwt_extended import JWTManager


# Import and include namespaces from your resource files
from app.resources.genre_resource import genre_namespace,genre_model
from app.resources.channel_resource import channel_namespace
from app.resources.program_resource import program_namespace,program_model
from app.resources.schedule_resource import schedule_namespace,schedule_model
from app.resources.brand_resource import brand_namespace
from app.resources.spot_resource import spot_namespace,spot_model
from app.resources.product_resource import product_namespace, product_model
from decouple import config


def create_app():
    """
    Create and configure the Flask application.

    Returns:
        Flask: The configured Flask application.
    """
    # Create a Flask app instance
    app = Flask(__name__)
    # Load configuration settings from the Config class
    app.config.from_object(Config)
    # app.config["JWT_TOKEN_LOCATION"] = ["headers", "cookies", "json", "query_string"]
    # app.config["JWT_HEADER_NAME"] = "Authorization"
    # Initialize the api extension
    api.init_app(app)
    # Initialize the database extension
    db.init_app(app)
    jwt = JWTManager(app)

 
    api.add_namespace(genre_namespace)
    api.add_namespace(program_namespace)
    api.add_namespace(channel_namespace)
    api.add_namespace(schedule_namespace)
    api.add_namespace(product_namespace)
    api.add_model('Program', program_model)
    api.add_model("Schedule", schedule_model)
    api.add_model("Genre",genre_model)
    api.add_model("Product",product_model)
    # api.add_namespace(brand_namespace)

    return app