from ..dependencies import db
from ..base.models import Base


class ExaminationSchedule(Base):
    __tablename__ = 'examination_schedules'

    title = db.Column(db.String(100), unique=True, nullable=False)
    duration_time = db.Column(db.Integer, nullable=False)  # in minutes
    start_date_for_enrollment_students = db.Column(db.DateTime)
    end_date_for_enrollment_students = db.Column(db.DateTime)
    start_date = db.Column(db.DateTime, nullable=False)
    end_date = db.Column(db.DateTime, nullable=False)
    year_group_id = db.Column(db.Integer, db.ForeignKey('year_groups.id'), nullable=False)
    year_group = db.relationship('YearGroup', backref='examination_schedules')


committee = db.Table(
    "committees",
    db.Column("term_of_defence_id", db.ForeignKey("term_of_defences.id")),
    db.Column("project_supervisor_id", db.ForeignKey("project_supervisors.id")),
)


class TermOfDefence(Base):
    __tablename__ = 'term_of_defences'

    start_date = db.Column(db.DateTime, nullable=False)
    end_date = db.Column(db.DateTime, nullable=False)
    examination_schedule_id = db.Column(db.Integer, db.ForeignKey('examination_schedules.id'))
    examination_schedule = db.relationship('ExaminationSchedule', backref='term_of_defences')
    group_id = db.Column(db.Integer, db.ForeignKey('groups.id'))
    group = db.relationship("Group", uselist=False, backref='term_of_defence', lazy='joined')
    members_of_committee = db.relationship("ProjectSupervisor", secondary=committee, lazy='joined')


class TemporaryAvailability(Base):
    __tablename__ = 'temporary_availabilities'

    start_date = db.Column(db.DateTime, nullable=False)
    end_date = db.Column(db.DateTime, nullable=False)
    examination_schedule_id = db.Column(db.Integer, db.ForeignKey('examination_schedules.id'), nullable=False)
    examination_schedule = db.relationship("ExaminationSchedule", backref='temporary_availabilities')
    project_supervisor_id = db.Column(db.Integer, db.ForeignKey('project_supervisors.id'), nullable=False)
    project_supervisor = db.relationship("ProjectSupervisor", backref='temporary_availabilities')