#include "Semestre.h"

int Semestre::nextId = 0; // Inicializar el contador estático

Semestre::Semestre(int id, const QString& nombre, const QDate& fechaInicio, const QDate& fechaFin)
    : idSemestre(id), nombre(nombre), fechaInicio(fechaInicio), fechaFin(fechaFin) {
    if (id == 0) {
        this->idSemestre = ++nextId;
    } else if (id > nextId) { // ¡Importante para la carga!
        nextId = id;
    }
}

int Semestre::getIdSemestre() const {
    return idSemestre;
}

QString Semestre::getNombre() const {
    return nombre;
}

QDate Semestre::getFechaInicio() const {
    return fechaInicio;
}

QDate Semestre::getFechaFin() const {
    return fechaFin;
}

int Semestre::getNumeroSemanas() const {
    // Calcula la diferencia en días y divide por 7.
    // QDate::daysTo() devuelve la cantidad de días entre esta fecha y la otra fecha.
    // Si la fecha de inicio y fin son el mismo día, daysTo() devuelve 0.
    // Consideramos que una diferencia de 0-6 días es la semana 1, 7-13 días es la semana 2, etc.
    return (fechaInicio.daysTo(fechaFin) / 7) + 1;
}

int Semestre::obtenerSemanaDesdeFecha(const QDate& fecha) const {
    if (fecha < fechaInicio || fecha > fechaFin) {
        return -1; // La fecha está fuera del rango del semestre
    }
    return (fechaInicio.daysTo(fecha) / 7) + 1;
}

// Opcional: Para reiniciar los IDs de semestre al cargar/eliminar datos
/*
void Semestre::resetNextId() {
    nextId = 0;
}
void Semestre::setNextId(int id) {
    if (id > nextId) nextId = id;
}
*/