from flask import Flask, jsonify, redirect, session, flash, request, render_template
from db import get_db
from modules.auth import auth
from modules.dashboard import dashboard_mod
from modules.topico import topico_mod
from modules.gdth import gdth_mod
from modules.importacion import importacion_mod
from modules.ssoma import ssoma_mod
from modules.requerimientos_generales import rq_gen_mod
from modules.logistica import logistica_mod
from modules.almacen import almacen_mod
from modules.sistemas import sistemas_mod
from modules.mantenimiento_ssgg import ssgg_mod
from modules.activos_fijos import activos_mod
from modules.marketing_tickets import mkt_mod
from functools import wraps

from datetime import timedelta
import os

app = Flask(__name__)
app.secret_key = 'clave_secreta_fija_y_muy_segura_aqui'

app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(minutes=30)
app.config['SESSION_REFRESH_EACH_REQUEST'] = True

app.register_blueprint(auth)
app.register_blueprint(dashboard_mod)
app.register_blueprint(topico_mod)
app.register_blueprint(gdth_mod)
app.register_blueprint(importacion_mod)
app.register_blueprint(ssoma_mod)
app.register_blueprint(rq_gen_mod)
app.register_blueprint(logistica_mod)
app.register_blueprint(almacen_mod)
app.register_blueprint(sistemas_mod)
app.register_blueprint(ssgg_mod)
app.register_blueprint(activos_mod)
app.register_blueprint(mkt_mod)

@app.before_request
def refrescar_o_expirar_sesion():
    session.permanent = True
    session.modified = True

@app.route('/')
def home():
    if 'usuario_id' in session:
        roles = session.get('roles', [])
        if len(roles) == 1 and 3 in roles:
            return redirect('/modulo_topico')
        return redirect('/dashboard')
    return redirect('/login')

@app.route('/api/notificaciones_globales')
def api_notificaciones_globales():
    if 'usuario_id' not in session:
        return jsonify({'total_no_leidas': 0, 'alertas': []})

    conn = get_db()
    cursor = conn.cursor(dictionary=True)

    cursor.execute("""
        SELECT COUNT(*) AS total 
        FROM notificaciones 
        WHERE usuario_id = %s AND leido = 0
    """, (session['usuario_id'],))
    total_no_leidas = cursor.fetchone()['total']

    cursor.execute("""
        SELECT id_notificacion, titulo, mensaje, link, icono, color, leido,
               DATE_FORMAT(fecha_creacion, '%d/%m %H:%i') AS fecha_fmt
        FROM notificaciones 
        WHERE usuario_id = %s 
        ORDER BY leido ASC, fecha_creacion DESC 
        LIMIT 15
    """, (session['usuario_id'],))
    alertas = cursor.fetchall()

    cursor.close()
    conn.close()

    return jsonify({
        'total_no_leidas': total_no_leidas,
        'alertas': alertas
    })

@app.route('/api/notificaciones/marcar_leida/<int:id_notif>', methods=['POST'])
def api_marcar_notif_leida(id_notif):
    if 'usuario_id' not in session:
        return jsonify({'success': False}), 401

    conn = get_db()
    cursor = conn.cursor()
    cursor.execute("UPDATE notificaciones SET leido = 1 WHERE id_notificacion = %s AND usuario_id = %s", (id_notif, session['usuario_id']))
    conn.commit()
    cursor.close()
    conn.close()
    return jsonify({'success': True})

@app.route('/api/notificaciones/marcar_todas', methods=['POST'])
def api_marcar_todas_notif():
    if 'usuario_id' not in session:
        return jsonify({'success': False}), 401

    conn = get_db()
    cursor = conn.cursor()
    cursor.execute("UPDATE notificaciones SET leido = 1 WHERE usuario_id = %s", (session['usuario_id'],))
    conn.commit()
    cursor.close()
    conn.close()
    return jsonify({'success': True})
    
if __name__ == '__main__':
    app.run(debug=True, host="0.0.0.0", port=5050)