"""
app.py — Fabrica principal de la aplicacion Flask OTEC JCCD
"""

import os
from flask import Flask
from config import Config
from extensions import db, mail


def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)

    db.init_app(app)
    mail.init_app(app)

    from blueprints.web        import web_bp
    from blueprints.intranet    import intranet_bp
    from blueprints.pagos       import pagos_bp
    from blueprints.aula        import aula_bp
    from blueprints.inscripcion import inscripcion_bp
    from blueprints.migracion_moodle import migracion_bp
    from blueprints.acceso      import acceso_bp

    app.register_blueprint(web_bp)
    app.register_blueprint(intranet_bp, url_prefix='/admin')
    app.register_blueprint(pagos_bp,    url_prefix='/pagos')
    app.register_blueprint(aula_bp,     url_prefix='/aula')
    app.register_blueprint(inscripcion_bp)
    app.register_blueprint(migracion_bp)
    app.register_blueprint(acceso_bp)

    with app.app_context():
        # Importar todos los modelos ANTES de create_all
        import models          # Producto, Comprobante
        import models_estudiantes  # Usuario, Curso, Inscripción

        db.create_all()

        try:
            from sqlalchemy import text
            r = db.session.execute(text('SELECT COUNT(*) FROM comprobantes')).scalar()
            if r == 0:
                db.session.execute(text('ALTER TABLE comprobantes AUTO_INCREMENT = 10000'))
                db.session.commit()
        except Exception:
            pass

    return app


application = create_app()