from __future__ import absolute_import
from flask_sqlalchemy.query import Query as BaseQuery
from dostadmin import db
from dostadmin.mixins import TimestampMixin
from utils.helpers.helpers import get_current_isttime
from sqlalchemy import or_, and_


class ExperimentQuery(BaseQuery):
    def get_by_id(self, experiment_id):
        return self.filter(Experiment.id == experiment_id).first()

    def get_experiment_log(self):
        return self.all()

    def get_active_experiments(self):
        today = get_current_isttime().date()
        return self.filter(
            or_(Experiment.end_date >= today, Experiment.end_date.is_(None))
        ).all()

    def get_experiment_by_name(self, name):
        return self.filter(Experiment.name == name).all()

    def get_completed_experiments(self):
        today = get_current_isttime().date()
        return self.filter(
            and_(Experiment.end_date < today, Experiment.end_date.isnot(None))
        ).all()


class Experiment(TimestampMixin, db.Model):
    __tablename__ = "experiment"
    query_class = ExperimentQuery

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    description = db.Column(db.Text)
    start_date = db.Column(db.Date)
    end_date = db.Column(db.Date)
