"""
passenger_wsgi.py – Punto de entrada para Phusion Passenger (hosting compartido).
Passenger busca la variable 'application' a nivel de módulo como callable WSGI.
"""
import sys
import os

# Asegura que Python encuentre los módulos del proyecto
# independientemente del directorio de trabajo que use Passenger.
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

# --------------------------------------------------------------------------
# Bloque de diagnóstico: captura cualquier error de arranque y lo muestra
# en el navegador en texto plano. QUITAR una vez que funcione correctamente.
# --------------------------------------------------------------------------
try:
    import logging
    from app import create_app, db
    from app.models import Rol, Usuario

    logging.basicConfig(level=logging.INFO)
    logger = logging.getLogger(__name__)

    app = create_app('production')

    def inicializar_bd():
        db.create_all()
        roles_base = ['Administrador', 'Desarrollador', 'Promotor']
        for nombre in roles_base:
            if not Rol.query.filter_by(nombre=nombre).first():
                db.session.add(Rol(nombre=nombre))
        db.session.commit()

        if not Usuario.query.filter_by(correo='admin@empresa.com').first():
            rol_admin = Rol.query.filter_by(nombre='Administrador').first()
            admin = Usuario(
                nombre_completo='Administrador del Sistema',
                correo='admin@empresa.com',
                puesto='Administrador del Sistema',
                rol_id=rol_admin.id,
                activo=True,
            )
            admin.set_password('Admin123!')
            db.session.add(admin)
            db.session.commit()

    @app.context_processor
    def inject_now():
        from datetime import datetime
        return {'now': datetime.utcnow}

    with app.app_context():
        inicializar_bd()

    # Variable requerida por Passenger
    application = app

except Exception as _startup_error:
    import traceback
    _tb = traceback.format_exc()
    _py  = sys.version
    _path = '\n'.join(sys.path)

    def application(environ, start_response):
        body = (
            f"STARTUP ERROR – copie este texto para diagnosticar\n"
            f"{'=' * 60}\n\n"
            f"{_tb}\n\n"
            f"Python: {_py}\n\n"
            f"sys.path:\n{_path}\n"
        ).encode('utf-8')
        start_response('500 Internal Server Error', [
            ('Content-Type', 'text/plain; charset=utf-8'),
            ('Content-Length', str(len(body))),
        ])
        return [body]
