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


class ChildClassQuery(BaseQuery):
    def get_child_by_name_and_parent(self, class_id, child_id):
        return self.filter(
            and_(ChildClass.class_id == class_id, ChildClass.child_id == child_id)
        ).first()


class ChildClass(TimestampMixin, db.Model):
    __tablename__ = "childclass"
    query_class = ChildClassQuery

    id = db.Column(db.Integer, primary_key=True)
    class_id = db.Column(db.Integer, db.ForeignKey("class.id"))
    child_id = db.Column(db.Integer, db.ForeignKey("child.id"))

    @classmethod
    def get_or_create_child_class(cls, classroom_id, child_id):
        child_class = ChildClass.query.get_child_by_name_and_parent(
            classroom_id, child_id
        )
        if child_class:
            return child_class

        child_class = ChildClass(class_id=classroom_id, child_id=child_id)
        db.session.add(child_class)
        db.session.commit()
        return child_class
