#ifndef EVALUACIONESRAMOSWIDGET_H
#define EVALUACIONESRAMOSWIDGET_H

#include <QWidget>
#include <QComboBox>
#include <QListWidget>
#include <QTableWidget>
#include <QPushButton>
#include <QMap>
#include <QDateEdit> // Para la columna de fecha
#include <QLineEdit> // Para la edición de nombre y ponderación como expresión
#include <QDoubleSpinBox> // Para la edición de notas
#include <QHeaderView> // Para ajustar el tamaño de las columnas
#include <QLabel>
#include <QTimer>
#include <QCheckBox> // Para marcar si la actividad está completada
#include "Calendario.h" // Incluir el Calendario principal
// #include "GestorDatos.h" // Ya no se necesita directamente aquí como miembro
#include "ActividadAcademica.h" // Incluir la clase unificada

class EvaluacionesRamosWidget : public QWidget {
    Q_OBJECT
public:
    // El constructor ahora recibe el Calendario principal
    explicit EvaluacionesRamosWidget(Calendario* calendario, QWidget *parent = nullptr);
    void recargarVista();
    void limpiarVista();  // Limpia todos los datos visuales y punteros

private slots:
    void cargarRamosDelSemestre(); // Slot para QComboBox::currentTextChanged
    void mostrarEvaluaciones(QListWidgetItem *item); // Slot para QListWidget::itemClicked
    void guardarCambios(); // Slot para QPushButton::clicked

    // Slots para manejar la edición de celdas si usamos QTableWidget::cellChanged
    // void onCellChanged(int row, int column); // Opcional: para guardar cambios al instante

signals:
    void evaluacionAgregada();
    void evaluacionesActualizadas();


private:
    void inicializarUI();
    void cargarSemestres();
    // Helper para evaluar expresiones, ya que la ponderación puede ser "25/3"
    float evaluateExpression(const QString& expression);
    QLabel* mensajeGuardadoLabel;
    QTimer* mensajeTimer; 


    Calendario* m_calendario; // Puntero al objeto Calendario principal
    // GestorDatos* gestorDatos; // Ya no es un miembro aquí, se accede a través de m_calendario

    QComboBox *comboSemestres;
    QListWidget *listaRamos;
    QTableWidget *tablaEvaluaciones;
    QPushButton *botonGuardar;
    QPushButton *botonAgregar;

    // Almacena el ramo actualmente seleccionado para trabajar con él
    Ramo* ramoActual;
    QMap<QString, Ramo*> mapaRamosVisibles; // Mapa para relacionar nombres de ramo con objetos Ramo*

    // Para la edición en tabla: Mapear la fila de la tabla a la ActividadAcademica*
    QVector<ActividadAcademica*> actividadesEnTabla;
};

#endif // EVALUACIONESRAMOSWIDGET_H
