from __future__ import absolute_import
from flask_sqlalchemy.query import Query as BaseQuery
from dostadmin import db
from dostadmin.mixins import TimestampMixin


class TeacherQuery(BaseQuery):
    def get_all_teachers(self):
        return self.filter().all()

    def get_by_school(self, school_id):
        return self.filter(Teacher.school_id == school_id).all()

    def get_by_id(self, teacher_id):
        return self.filter(Teacher.id == teacher_id).first()


class Teacher(TimestampMixin, db.Model):
    __tablename__ = "teacher"
    query_class = TeacherQuery

    id = db.Column(db.Integer, primary_key=True)
    school_id = db.Column(db.Integer, db.ForeignKey("partner.id"))
    user_id = db.Column(db.Integer, db.ForeignKey("users.id"))

    classes = db.relationship(
        "Class", backref="teacher", primaryjoin="Class.teacher_id == Teacher.id"
    )

    def __repr__(self):
        return "Teacher " + self.user.name + str(self.id)

    @classmethod
    def add_teacher(cls, user_id, school_id):
        teacher = Teacher(school_id=school_id, user_id=user_id)
        db.session.add(teacher)
        db.session.commit()
        return teacher
