#ifndef ADDRAMODIALOG_H
#define ADDRAMODIALOG_H

#include <QDialog>
#include <QLineEdit>
#include <QSpinBox>
#include <QDoubleSpinBox>
#include <QPushButton>
#include <QComboBox>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QFormLayout>
#include <QLabel>
#include <QColorDialog>
#include <QGroupBox>
#include <QTableWidget>
#include <QHeaderView>
#include <QDateEdit> // Asegurarse de incluir para QDateEdit

#include "Ramo.h"
#include "Semestre.h"
// #include "ActividadEvaluativa.h" // ¡Eliminada tras unificación!
#include "ActividadAcademica.h" // ¡Nueva clase unificada!

struct ActividadEvaluativaInfo {
    QString nombre;
    QString ponderacionExpression; // Guardamos la expresión, no el float evaluado
    QDate fecha;
};

class AddRamoDialog : public QDialog {
    Q_OBJECT

public:
    explicit AddRamoDialog(const QList<Semestre*>& semestresDisponibles, QWidget *parent = nullptr);
    ~AddRamoDialog();

    // Getters para información general del ramo
    QString getNombre() const;
    QString getCodigo() const;
    int getCreditos() const;
    int getSemestreIdSeleccionado() const;
    QString getProfesor() const;
    QColor getColor() const;

    // Getters para TOTALES DE HORAS (SCT-Chile)
    float getTotalHorasCatedra() const;
    float getTotalHorasAyudantiaPresencial() const;
    float getTotalHorasEvaluacionesPresencial() const;
    float getTotalHorasOtrasPresencial() const;
    float getTotalHorasEstudioNoPresencial() const;
    float getTotalHorasProyectosNoPresencial() const;

    // Getter para las actividades evaluativas definidas en el diálogo (¡Ahora ActividadAcademica!)
    QList<ActividadAcademica*> getActividadesEvaluativasDefinidas(Ramo* ramoParent) const ;

private slots:
    void on_seleccionarColorButton_clicked();
    void on_addActividadEvalButton_clicked();
    void on_removeActividadEvalButton_clicked();
    void accept();

private:
    void setupUi(const QList<Semestre*>& semestresDisponibles);
    void addActividadEvaluativaRow(const QString& nombre = "", const QString& ponderacionString = "0", const QDate& fecha = QDate::currentDate(), const QString& estimacionHorasString = "0");
    bool validateActividadesEvaluativas() const;
    // Helper para evaluar expresiones de ponderación (definido en .cpp)


    // Información General
    QLineEdit *nombreLineEdit;
    QLineEdit *codigoLineEdit;
    QSpinBox *creditosSpinBox;
    QComboBox *semestreComboBox;
    QLineEdit *profesorLineEdit;
    QPushButton *seleccionarColorButton;
    QLabel *colorPreviewLabel;
    QColor selectedColor;

    // Dedicación de Horas (SCT-Chile) - ¡CAMBIADO A TOTALES DE HORAS!
    // PRESENCIAL
    QDoubleSpinBox *totalHorasCatedraSpinBox;
    QDoubleSpinBox *totalHorasAyudantiaPresencialSpinBox;
    QDoubleSpinBox *totalHorasEvaluacionesPresencialSpinBox;
    QDoubleSpinBox *totalHorasOtrasPresencialSpinBox;

    // NO PRESENCIAL
    QDoubleSpinBox *totalHorasEstudioNoPresencialSpinBox;
    QDoubleSpinBox *totalHorasProyectosNoPresencialSpinBox;

    // Actividades Evaluativas
    QTableWidget *actividadesEvaluativasTable;
    QPushButton *addActividadEvalButton;
    QPushButton *removeActividadEvalButton;

    QPushButton *okButton;
    QPushButton *cancelButton;

    QMap<QString, int> semestreNameToIdMap;
};

#endif // ADDRAMODIALOG_H