"""évènements scolaires dans la vie d'un étudiant(inscription, ...)
"""
from app import db
from app.models import SHORT_STR_LEN


class ScolarEvent(db.Model):
    """Evenement dans le parcours scolaire d'un étudiant"""

    __tablename__ = "scolar_events"
    id = db.Column(db.Integer, primary_key=True)
    event_id = db.synonym("id")
    etudid = db.Column(
        db.Integer,
        db.ForeignKey("identite.id", ondelete="CASCADE"),
    )
    event_date = db.Column(db.DateTime(timezone=True), server_default=db.func.now())
    formsemestre_id = db.Column(
        db.Integer,
        db.ForeignKey("notes_formsemestre.id", ondelete="SET NULL"),
    )
    ue_id = db.Column(
        db.Integer,
        db.ForeignKey("notes_ue.id", ondelete="SET NULL"),
    )
    # 'CREATION', 'INSCRIPTION', 'DEMISSION',
    # 'AUT_RED', 'EXCLUS', 'VALID_UE', 'VALID_SEM'
    # 'ECHEC_SEM'
    # 'UTIL_COMPENSATION'
    event_type = db.Column(db.String(SHORT_STR_LEN))
    # Semestre compensé par formsemestre_id:
    comp_formsemestre_id = db.Column(
        db.Integer,
        db.ForeignKey("notes_formsemestre.id"),
    )
    etud = db.relationship("Identite", lazy="select", backref="events", uselist=False)
    formsemestre = db.relationship(
        "FormSemestre", lazy="select", uselist=False, foreign_keys=[formsemestre_id]
    )

    def to_dict(self) -> dict:
        "as a dict"
        d = dict(self.__dict__)
        d.pop("_sa_instance_state", None)
        return d

    def __repr__(self) -> str:
        return f"{self.__class__.__name__}({self.event_type}, {self.event_date.isoformat()}, {self.formsemestre})"