from app import app
from flask import render_template, request, flash, redirect, url_for, session, jsonify, send_file

# Importando controllers para el modulo de admin
from controllers.funciones_admin import *
from controllers.funciones_ie import sql_lista_profesoresBD, sql_detalles_ieBD
from controllers.funciones_admin import sql_lista_todas_ieBD

# Importación robusta: evita que Gunicorn/Passenger muera al importar.
# Nota: antes había imports directos de símbolos que podían provocar ImportError y por eso 502.
import controllers.funciones_profesores as _funciones_profesores

sql_doc_profesoresBD = getattr(_funciones_profesores, 'sql_doc_profesoresBD', None)
sql_lista_profesores_con_estadisticasBD = getattr(_funciones_profesores, 'sql_lista_profesores_con_estadisticasBD', None)
sql_stats_documentos_por_tipoBD = getattr(_funciones_profesores, 'sql_stats_documentos_por_tipoBD', None)
sql_todos_documentos_profesoresBD = getattr(_funciones_profesores, 'sql_todos_documentos_profesoresBD', None)
sql_stats_documentos_prof_dniBD = getattr(_funciones_profesores, 'sql_stats_documentos_prof_dniBD', None)
sql_documentos_prof_dniBD = getattr(_funciones_profesores, 'sql_documentos_prof_dniBD', None)




# Fallbacks seguros (evitan que Gunicorn muera al importar)
if sql_doc_profesoresBD is None:
    def sql_doc_profesoresBD(_dniprof):
        return []

if sql_lista_profesores_con_estadisticasBD is None:
    def sql_lista_profesores_con_estadisticasBD(_codmodular):
        return []

if sql_stats_documentos_por_tipoBD is None:
    def sql_stats_documentos_por_tipoBD(_codmodular):
        return []

if sql_todos_documentos_profesoresBD is None:
    def sql_todos_documentos_profesoresBD(_codmodular):
        return []

if sql_stats_documentos_prof_dniBD is None:
    def sql_stats_documentos_prof_dniBD(_dniprof):
        return []

if sql_documentos_prof_dniBD is None:
    def sql_stats_documentos_prof_dniBD(_dniprof):
        return []

if sql_documentos_prof_dniBD is None:
    def sql_documentos_prof_dniBD(_dniprof):
        return []
import openpyxl
from datetime import datetime

PATH_URL_ADMIN = "public/admin"

@app.route('/admin-dashboard', methods=['GET'])
def admin_dashboard():
    if 'conectado' in session and session.get('admin') == 1:
        search_nivel = request.args.get('nivel', '')
        search_nombre = request.args.get('nombre', '')
        instituciones = sql_lista_todas_ieBD(search_nivel=search_nivel, search_nombre=search_nombre)
        return render_template(f'{PATH_URL_ADMIN}/dashboard.html',
                             instituciones=instituciones,
                             search_nivel=search_nivel,
                             search_nombre=search_nombre)
    else:
        flash('Acceso denegado. Solo administradores.', 'error')
        return redirect(url_for('inicio'))


@app.route('/admin/reporte-profesores/<string:codmodular>', methods=['GET'])
def admin_reporte_profesores_dashboard(codmodular):
    if 'conectado' not in session or session.get('admin') != 1:
        flash('Acceso denegado. Solo administradores.', 'error')
        return redirect(url_for('inicio'))
    
    profesores = sql_lista_profesores_con_estadisticasBD(codmodular)
    stats = sql_stats_documentos_por_tipoBD(codmodular)
    documentos = sql_todos_documentos_profesoresBD(codmodular)
    ie_info = sql_detalles_ieBD(codmodular)
    
    return render_template(f'{PATH_URL_ADMIN}/reporte_profesores_dashboard.html',
                         codmodular=codmodular, 
                         profesores=profesores or [],
                         stats=stats or [],
                         documentos=documentos or [],
                         ie_info=ie_info)

@app.route('/admin/reporte-profesores/<string:codmodular>/prof/<string:dniprof>', methods=['GET'])
def admin_reporte_prof_dni(codmodular, dniprof):
    if 'conectado' not in session or session.get('admin') != 1:
        return jsonify({'error': 'Acceso denegado'}), 403
    
    prof_stats = sql_stats_documentos_prof_dniBD(dniprof)
    prof_docs = sql_documentos_prof_dniBD(dniprof)
    
    return jsonify({
        'stats': prof_stats or [],
        'docs': prof_docs or [],
        'dniprof': dniprof
    })

@app.route('/buscando-ie', methods=['POST'])
def buscando_ie():
    if 'conectado' in session and session.get('admin') == 1:
        data = request.get_json()
        search_nivel = data.get('nivel', '')
        search_nombre = data.get('nombre', '')

        instituciones = sql_lista_todas_ieBD(search_nivel=search_nivel, search_nombre=search_nombre)

        if not instituciones:
            return jsonify({'fin': 0})

        # Generar HTML para la tabla
        html_rows = ""
        for ie in instituciones:
            html_rows += f"""
            <tr>
                <td>{ie['codmodular']}</td>
                <td>{ie['establecimiento']}</td>
                <td>{ie['nombreie']}</td>
                <td>{ie['nivel']}</td>
                <td>{ie['distrito']}</td>
                <td>
                    <a href="/iiee/{ie['codmodular']}" class="btn btn-primary btn-sm">Ver Documentos</a>
                    <a href="/lista-de-profesores/{ie['codmodular']}" class="btn btn-secondary btn-sm">Ver Profesores</a>
                </td>
            </tr>
            """

        return jsonify({'html': html_rows})
    else:
        return jsonify({'error': 'Acceso denegado'}), 403

@app.route('/reporte-documentos-profesores', methods=['GET'])
def reporte_documentos_profesores():
    if 'conectado' in session and session.get('admin') == 1:
        ie_list = sql_lista_todas_ieBD()
        wb = openpyxl.Workbook()
        ws = wb.active
        ws.title = 'Reporte Documentos Profesores'

        # Headers
        headers = ['Código Modular', 'Establecimiento', 'Nombre IE', 'Nivel', 'Distrito', 'Profesor', 'DNI', 'Curso', 'Sesión', 'Mes', 'Trimestre', 'Archivo', 'Fecha Subida']
        for col_num, header in enumerate(headers, 1):
            ws.cell(row=1, column=col_num, value=header)

        row_num = 2
        for ie in ie_list:
            profesores = sql_lista_profesoresBD(ie['codmodular'])
            for prof in profesores:
                docs = sql_doc_profesoresBD(prof['dniprof'])
                if docs:
                    for doc in docs:
                        ws.cell(row=row_num, column=1, value=ie['codmodular'])
                        ws.cell(row=row_num, column=2, value=ie['establecimiento'])
                        ws.cell(row=row_num, column=3, value=ie['nombreie'])
                        ws.cell(row=row_num, column=4, value=ie['nivel'])
                        ws.cell(row=row_num, column=5, value=ie['distrito'])
                        ws.cell(row=row_num, column=6, value=prof['nombres'] + ' ' + prof['apaterno'] + ' ' + prof['amaterno'])
                        ws.cell(row=row_num, column=7, value=prof['dniprof'])
                        ws.cell(row=row_num, column=8, value=doc['curso'])
                        ws.cell(row=row_num, column=9, value=doc['sesion'])
                        ws.cell(row=row_num, column=10, value=doc['mes'])
                        ws.cell(row=row_num, column=11, value=doc['trimestre'])
                        ws.cell(row=row_num, column=12, value=doc['archivo'])
                        ws.cell(row=row_num, column=13, value=doc['fechasubida'].strftime('%Y-%m-%d %H:%M:%S'))
                        row_num += 1
                else:
                    # Profesores sin documentos
                    ws.cell(row=row_num, column=1, value=ie['codmodular'])
                    ws.cell(row=row_num, column=2, value=ie['establecimiento'])
                    ws.cell(row=row_num, column=3, value=ie['nombreie'])
                    ws.cell(row=row_num, column=4, value=ie['nivel'])
                    ws.cell(row=row_num, column=5, value=ie['distrito'])
                    ws.cell(row=row_num, column=6, value=prof['nombres'] + ' ' + prof['apaterno'] + ' ' + prof['amaterno'])
                    ws.cell(row=row_num, column=7, value=prof['dniprof'])
                    row_num += 1

        now = datetime.now()
        filename = 'static/downloads-excel/Reporte_documentos_profesores_' + now.strftime('%Y_%m_%d') + '.xlsx'
        wb.save(filename)
        return send_file(filename, as_attachment=True, download_name='Reporte_documentos_profesores_' + now.strftime('%Y_%m_%d') + '.xlsx')
    else:
        flash('Acceso denegado. Solo administradores.', 'error')
        return redirect(url_for('inicio'))
