#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTabWidget>
#include <QTextEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QMessageBox>
#include <QDebug>
#include <QListWidget> // Si lo usas en alguna parte
#include <QFormLayout> // Para el diálogo de semestre
#include <QLineEdit>   // Para el diálogo de semestre
#include <QDateEdit>   // Para el diálogo de semestre
#include <QCheckBox>   // Para el diálogo de nota
#include <QScrollArea>  ///NUEVO
#include <QLabel>      ///NUEVO
#include <QCalendarWidget>

#include "Calendario.h"
// #include "AddSemestreDialog.h" // Esta línea ya NO es necesaria
#include "AddRamoDialog.h"
#include "AddTareaDialog.h"
#include "AddNotaDialog.h"
#include "EvaluacionesRamosWidget.h" // ¡Nueva inclusión!
#include "CalendarViewWidget.h"

// Clase anidada AddSemestreDialog (DEFINICIÓN COMPLETA AQUÍ)
class AddSemestreDialog : public QDialog {
    Q_OBJECT

public:
    explicit AddSemestreDialog(QWidget *parent = nullptr) : QDialog(parent) {
        setWindowTitle("Agregar Nuevo Semestre");
        QVBoxLayout *layout = new QVBoxLayout(this);
        QFormLayout *formLayout = new QFormLayout();

        nombreLineEdit = new QLineEdit(this);
        nombreLineEdit->setPlaceholderText("Ej: Primavera 2025");
        formLayout->addRow("Nombre del Semestre:", nombreLineEdit);

        fechaInicioDateEdit = new QDateEdit(QDate::currentDate(), this);
        fechaInicioDateEdit->setCalendarPopup(true);
        fechaInicioDateEdit->setDisplayFormat("dd/MM/yyyy");
        formLayout->addRow("Fecha de Inicio:", fechaInicioDateEdit);

        fechaFinDateEdit = new QDateEdit(QDate::currentDate().addDays(17 * 7), this); // Aprox. 17 semanas
        fechaFinDateEdit->setCalendarPopup(true);
        fechaFinDateEdit->setDisplayFormat("dd/MM/yyyy");
        formLayout->addRow("Fecha de Término:", fechaFinDateEdit);

        layout->addLayout(formLayout);

        QHBoxLayout *buttonLayout = new QHBoxLayout();
        QPushButton *okButton = new QPushButton("Aceptar", this);
        QPushButton *cancelButton = new QPushButton("Cancelar", this);
        buttonLayout->addStretch();
        buttonLayout->addWidget(okButton);
        buttonLayout->addWidget(cancelButton);
        layout->addLayout(buttonLayout);

        connect(okButton, &QPushButton::clicked, this, &QDialog::accept);
        connect(cancelButton, &QPushButton::clicked, this, &QDialog::reject);
    }

    QString getNombre() const { return nombreLineEdit->text(); }
    QDate getFechaInicio() const { return fechaInicioDateEdit->date(); }
    QDate getFechaFin() const { return fechaFinDateEdit->date(); }

private:
    QLineEdit *nombreLineEdit;
    QDateEdit *fechaInicioDateEdit;
    QDateEdit *fechaFinDateEdit;
};


// Declaración de MainWindow (ahora hereda de QMainWindow)
class MainWindow : public QMainWindow {
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

signals:
    void dataChanged(); // ¡DECLARACIÓN DEL SIGNAL dataChanged!
    void newData();


private slots:
    void on_agregarSemestreButton_clicked();
    void on_agregarRamoButton_clicked();
    void on_agregarTareaButton_clicked();
    void on_registrarNotaButton_clicked();
    void on_guardarDatosButton_clicked();
    void on_cargarDatosButton_clicked();
    void on_eliminarDatosButton_clicked();
    void on_generarToDoButton_clicked();
    void on_actividadCompletada_toggled(bool checked);  ///NUEVO
    void on_refreshCalendarEvents(); // tomas
private:
    void setupUi();
    void setupRamosTab(QWidget* parentWidget);
    void setupEventosTab(QWidget* parentWidget);
    void setupSemestresTab(QWidget* parentWidget);
    void setupDataControlTab(QWidget* parentWidget);
    void setupToDoTab(QWidget* parentWidget);
    void setupCalendarEventsTab(QWidget* parentWidget);

    void refreshRamosDisplay();
    void refreshEventosDisplay();
    void refreshSemestresDisplay();
    void refreshToDoDisplay(const QList<ActividadDiaria*>& toDoList);

    /* --- Método auxiliar para sincronizar Evaluaciones Ramos --- */
    void actualizarEvaluacionesRamos();

    Calendario* miCalendario;
    GestorDatos* gestorDatos; // <-- Ahora es un puntero miembro de MainWindow
    CalendarViewWidget *calendarEventsWidget;
    QTabWidget *tabWidget;

    // Semestres Tab
    QPushButton *agregarSemestreButton;
    QTextEdit *semestresDisplay;

    // Ramos Tab
    QPushButton *agregarRamoButton;
    QPushButton *registrarNotaButton; // Mantener este botón si se usa en otro lugar o se va a usar globalmente
    QTextEdit *ramosDisplay; // Esto es para el resumen, no la tabla de evaluaciones
    EvaluacionesRamosWidget* evaluacionesRamosWidget; // ¡Nueva declaración!

    // Eventos Tab
    QPushButton *agregarTareaButton;
    QTextEdit *eventosDisplay;

    // To-Do Tab
    QPushButton *generarToDoButton;
    QDateEdit *toDoDateEdit;


    QScrollArea *toDoScrollArea; ///NUEVO
    QWidget *toDoScrollContent; ///NUEVO
    QVBoxLayout *toDoLayout; ///NUEVO


    // Data Control Tab
    QPushButton *guardarDatosButton;
    QPushButton *cargarDatosButton;
    QPushButton *eliminarDatosButton;
};

#endif // MAINWINDOW_H
