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


class ExperimentConditionsQuery(BaseQuery):
    def get_by_id(self, experiment_condition_id):
        return self.filter(ExperimentConditions.id == experiment_condition_id).first()

    def get_by_experiment_id(self, experiment_id):
        return self.filter(ExperimentConditions.experiment_id == experiment_id).all()

    def get_condition_by_experiment_id_and_key(self, experiment_id, key):
        return self.filter(
            ExperimentConditions.experiment_id == experiment_id,
            ExperimentConditions.key == key,
        ).all()

    def get_active_conditions_by_experiment_id_and_category(
        self, experiment_id, category
    ):
        return self.filter(
            ExperimentConditions.experiment_id == experiment_id,
            ExperimentConditions.condition_category == category,
        ).all()

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


class ExperimentConditions(TimestampMixin, db.Model):
    __tablename__ = "experiment_conditions"
    query_class = ExperimentConditionsQuery

    class Status:
        ACTIVE = "active"
        INACTIVE = "inactive"

    class Category:
        GROUP_ASSIGNMENT = "GroupAssignment"

    id = db.Column(db.Integer, primary_key=True)
    experiment_id = db.Column(
        db.Integer, db.ForeignKey("experiment.id"), nullable=False
    )
    experiment_group_name = db.Column(db.String(100))
    condition_category = db.Column(db.String(100))
    key = db.Column(db.String(200), nullable=False)
    value = db.Column(db.String(1000))
    status = db.Column(db.String(100))
