"""
run.py – Punto de entrada de la aplicación.
Crea las tablas si no existen, inicializa el usuario admin y arranca Flask.
"""
import os
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(os.environ.get('FLASK_ENV', 'default'))


def inicializar_bd():
    """Crea tablas y datos semilla si aún no existen."""
    db.create_all()

    # Roles
    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()

    # Usuario administrador por defecto
    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()
        logger.info('Usuario admin creado: admin@empresa.com / Admin123!')
    else:
        logger.info('Usuario admin ya existe.')


# Contexto de plantillas: función now() para el footer
@app.context_processor
def inject_now():
    from datetime import datetime
    return {'now': datetime.utcnow}


with app.app_context():
    inicializar_bd()

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