"""
Atento a tu Futuro v2 - Aplicacion principal (Flask)
"""
import os
from flask import Flask
from dotenv import load_dotenv
from werkzeug.middleware.proxy_fix import ProxyFix

from config import Config
from extensions import db, login_manager

load_dotenv()


def create_app(config_class=Config):
    app = Flask(__name__, static_folder="static", template_folder="templates")
    app.config.from_object(config_class)

    app.config["APPLICATION_ROOT"] = os.environ.get("APPLICATION_ROOT", "/")
    app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_prefix=1)

    db.init_app(app)
    login_manager.init_app(app)
    login_manager.login_view = "auth.login"
    login_manager.login_message = "Por favor inicia sesion para acceder a esta seccion."
    login_manager.login_message_category = "info"

    from routes.main import main_bp
    from routes.auth import auth_bp
    from routes.dashboard import dashboard_bp
    from routes.admin import admin_bp
    from routes.instructor import instructor_bp
    from routes.aliado import aliado_bp
    from routes.learn import learn_bp
    from routes.scorm_api import scorm_api_bp
    from routes.reportes import reportes_bp
    from routes.certificados import certificados_bp

    app.register_blueprint(main_bp)
    app.register_blueprint(auth_bp, url_prefix="/auth")
    app.register_blueprint(dashboard_bp, url_prefix="/dashboard")
    app.register_blueprint(admin_bp, url_prefix="/admin")
    app.register_blueprint(instructor_bp, url_prefix="/instructor")
    app.register_blueprint(aliado_bp, url_prefix="/aliado")
    app.register_blueprint(learn_bp, url_prefix="/aprender")
    app.register_blueprint(scorm_api_bp, url_prefix="/api/scorm")
    app.register_blueprint(reportes_bp, url_prefix="/admin/reportes")
    app.register_blueprint(certificados_bp, url_prefix="/certificados")

    with app.app_context():
        try:
            db.create_all()
        except Exception as e:
            print(f"[WARN] No se pudieron crear las tablas: {e}")

    @app.route("/api/health")
    def health():
        return {"status": "ok", "app": "Atento a tu Futuro v2"}

    return app


app = create_app()

if __name__ == "__main__":
    app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))
