from flask import Flask, session, url_for, escape, request, send_file, abort
from settings import config
from importlib import import_module
import os
import sys
import inspect

def start_app():
    
    app=Flask(__name__, static_url_path=config.static_url_path, static_folder=config.static_folder)

    app.secret_key=config.secret_key

    application_root='/'

    if hasattr(config, 'application_root'):
        application_root=config.application_root


    app.config.update(
         APPLICATION_ROOT=application_root
    )

    workdir=os.getcwd()
    arr_module_path={}

    # Load blueprints
    
    for key_app, added_app in config.apps.items():

        controller_path=import_module(added_app[0])
            
        controller_base=os.path.dirname(controller_path.__file__)
        
        dir_controllers=os.listdir(controller_base)
        
        for controller in dir_controllers:
                
            if controller.find('.py')!=-1 and controller.find('__init__')==-1:
                    
                controller_py=controller.replace('.py', '')
                
                module_app=added_app[0]+'.'+controller_py

                a=import_module(module_app)
                
                app_name=getattr(a, added_app[1])

                app.register_blueprint(app_name, url_prefix=added_app[2])
                
                arr_module_path[key_app]=os.path.dirname(sys.modules[module_app].__file__)


    """
        module_app=config.apps[added_app][0]
        
        a=import_module(module_app)
        #print(added_app, file=sys.stdout)
        app_name=getattr(a, config.apps[added_app][1])

        app.register_blueprint(app_name, url_prefix=config.apps[added_app][2])
        
        arr_module_path[added_app]=os.path.dirname(sys.modules[module_app].__file__)
    """

    #Add media files support. Only for development. 
    
    @app.route('/mediafrom/<module>/<path:media_file>')
    def send_media_file(module, media_file):
        
        file_path=workdir+'/themes/'+config.theme+'/media/'+module+'/'+media_file
    
        if not os.path.isfile(file_path):
            #file_path=workdir+'/modules/'+module+'/media/'+media_file
            file_path=arr_module_path[module]+'/media/'+media_file

            if not os.path.isfile(file_path):
                abort(404)
                
        return send_file(file_path)

    return app
