import os
from flask import Flask, render_template, session
from auth import auth_bp
from rutas_config import config_bp
from rutas_agenda import agenda_bp
from rutas_conflictos import conflictos_bp
from rutas_grupos import grupos_bp
from backend.security import requiere_ejecutivo, requiere_login
from backend.db_core import get_connection
from dotenv import load_dotenv

# Cargar variables de entorno al iniciar la app
load_dotenv()

app = Flask(__name__)
# Usa la variable de entorno o un fallback de seguridad si no la encuentra
app.secret_key = os.getenv('UTRAU_SECRET_KEY', 'utrau_secret_2026')

# Registro de Módulos (Blueprints)
app.register_blueprint(auth_bp)
app.register_blueprint(config_bp)
app.register_blueprint(agenda_bp)
app.register_blueprint(conflictos_bp)
app.register_blueprint(grupos_bp)

@app.context_processor
def inject_theme():
    return dict(tema=session.get('tema_visual', 0))

@app.route('/')
@requiere_login
def index():
    db = get_connection()
    cursor = db.cursor(dictionary=True)

    # Menú Dinámico
    if session.get('user_rol') == 4:
        cursor.execute("SELECT * FROM utrau_menu_sistema ORDER BY orden")
    else:
        cursor.execute("SELECT * FROM utrau_menu_sistema WHERE FIND_IN_SET(%s, roles_permitidos) ORDER BY orden", (session.get('user_rol'),))
    menu = cursor.fetchall()

    # Cálculo de Estadísticas en Tiempo Real
    cursor.execute("SELECT COUNT(*) as total FROM utrau_conflictos WHERE estado = 'Activo'")
    total_conflictos = cursor.fetchone()['total']

    cursor.execute("SELECT COUNT(*) as total FROM utrau_agenda WHERE fecha_inicio >= CURRENT_DATE() AND estado != 'Cerrado'")
    actividades_futuras = cursor.fetchone()['total']

    cursor.execute("SELECT COUNT(*) as total FROM utrau_usuarios WHERE estado = 'ACTIVO'")
    total_companeros = cursor.fetchone()['total']

    cursor.close()
    db.close()

    return render_template('index.html',
                           user_nom=session.get('user_alias'),
                           menu=menu,
                           total_conflictos=total_conflictos,
                           actividades_futuras=actividades_futuras,
                           total_companeros=total_companeros)

if __name__ == '__main__':
    # Detectar si estamos en Producción desde el archivo .env o variable del servidor
    is_prod = os.getenv('UTRAU_PROD', 'False').lower() in ('true', '1', 't')
    
    # Si is_prod es True, debug será False. Y viceversa.
    app.run(debug=not is_prod, host='0.0.0.0', port=7000)