#ifndef RAMO_H
#define RAMO_H

#include <QString>
#include <QList>
#include <QColor>
// #include "ActividadEvaluativa.h" // ¡Ya no es necesaria directamente!
#include "ActividadAcademica.h" // Incluir la nueva clase base
#include "Semestre.h"

//hola

// Forward declarations
// class Tarea; // Ya no las necesitamos aquí, ActividadAcademica es la base
// class Certamen;
class BloqueHorario;

class Ramo {
public:
    // Constructor (sin cambios en la firma de atributos de horas)
    Ramo(int id, const QString& nombre, const QString& codigo, int creditos,
         Semestre* semestreAsociado, const QString& profesor, const QColor& color);

    ~Ramo();

    // Getters existentes
    int getIdRamo() const;
    QString getNombre() const;
    QString getCodigo() const;
    int getCreditos() const;
    Semestre* getSemestreAsociado() const;
    QString getProfesor() const;
    QColor getColorAsociado() const;

    // ¡Nuevos Getters para TOTALES DE HORAS!
    float getTotalHorasCatedra() const;
    float getTotalHorasAyudantiaPresencial() const;
    float getTotalHorasEvaluacionesPresencial() const;
    float getTotalHorasOtrasPresencial() const;

    float getTotalHorasEstudioNoPresencial() const;
    float getTotalHorasProyectosNoPresencial() const;

    // Calculadoras de totales (ahora usan los atributos directos)
    float getTotalHorasPresencialEstimado() const;
    float getTotalHorasNoPresencialEstimado() const;
    float getTotalHorasRelojEstimado() const;

    // Setters existentes
    void setNombre(const QString& nombre);
    void setCodigo(const QString& codigo);
    void setCreditos(int creditos);
    void setSemestreAsociado(Semestre* semestre);
    void setProfesor(const QString& profesor);
    void setColorAsociado(const QColor& color);

    // ¡Nuevos Setters para TOTALES DE HORAS!
    void setTotalHorasCatedra(float horas);
    void setTotalHorasAyudantiaPresencial(float horas);
    void setTotalHorasEvaluacionesPresencial(float horas);
    void setTotalHorasOtrasPresencial(float horas);
    void setTotalHorasEstudioNoPresencial(float horas);
    void setTotalHorasProyectosNoPresencial(float horas);

    void agregarActividadEvaluativa(ActividadAcademica* actividad); // Aceptar ActividadAcademica*
    void eliminarActividadEvaluativa(int idActividad);
    ActividadAcademica* obtenerActividadEvaluativaPorId(int idActividad) const; // Devolver ActividadAcademica*
    QList<ActividadAcademica*> getActividadesEvaluativas() const; // Devolver QList<ActividadAcademica*>

    float calcularAvance() const;
    float calcularNotaFinal() const;

private:
    int idRamo;
    QString nombre;
    QString codigo;
    int creditos;
    Semestre* semestreAsociado;
    QString profesor;
    QColor colorAsociado;

    // Atributos para almacenar TOTALES DE HORAS (SCT-Chile)
    // PRESENCIAL
    float m_totalHorasCatedra;
    float m_totalHorasAyudantiaPresencial;
    float m_totalHorasEvaluacionesPresencial;
    float m_totalHorasOtrasPresencial;

    // NO PRESENCIAL
    float m_totalHorasEstudioNoPresencial;
    float m_totalHorasProyectosNoPresencial;

    QList<ActividadAcademica*> actividadesEvaluativas;
    static int nextId;
};

#endif // RAMO_H