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


class UserAttributesQuery(BaseQuery):
    def get_details_by_user_id(self, user_id):
        return self.filter(UserAttributes.user_id == user_id).first()

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


class UserAttributes(TimestampMixin, db.Model):
    __tablename__ = "user_attributes"
    query_class = UserAttributesQuery

    id = db.Column(db.Integer, primary_key=True)
    random_sequence_number = db.Column(db.Float)
    user_id = db.Column(db.Integer, db.ForeignKey("users.id"))
    user_phone_number = db.Column(db.String(20))
    provider_number = db.Column(db.String(20))
    area = db.Column(db.String(200))
    gender_of_child = db.Column(db.String(50))
    kids_age = db.Column(db.Integer)
    number_of_kids = db.Column(db.String(100))
    parent_type = db.Column(db.String(100), unique=False)
    education = db.Column(db.String(30))
    occupation = db.Column(db.String(30))
    district = db.Column(db.String(100), unique=False)
    centre = db.Column(db.String(100), unique=False)
    block = db.Column(db.String(100), unique=False)
    sector = db.Column(db.String(100), unique=False)
    state = db.Column(db.String(100), unique=False)
    smartphone_access = db.Column(db.String(15))
    first_week_engagement_level = db.Column(db.String(15))
    first_week_total_listen_seconds = db.Column(db.Integer)
    first_week_average_listen_seconds = db.Column(db.Float)
    first_week_response_rate = db.Column(db.Float)
    first_week_prompt_response_rate = db.Column(db.Float)
    first_week_average_listen_rate = db.Column(db.Float)
    is_user_active_first_week = db.Column(db.String(30))
    user_age = db.Column(db.Integer)
    first_month_engagement_level = db.Column(db.String(30))
    first_month_total_listen_seconds = db.Column(db.Integer)
    first_month_average_listen_seconds = db.Column(db.Float)
    first_month_response_rate = db.Column(db.Float)
    first_month_prompt_response_rate = db.Column(db.Float)
    first_month_average_listen_rate = db.Column(db.Float)
    is_user_active_first_month = db.Column(db.String(15))
    previous_module = db.Column(db.Integer)
    last_week_engagement_level = db.Column(db.String(30))
    last_week_total_listen_seconds = db.Column(db.Integer)
    last_week_average_listen_seconds = db.Column(db.Float)
    last_week_response_rate = db.Column(db.Float)
    last_week_prompt_response_rate = db.Column(db.Float)
    last_week_average_listen_rate = db.Column(db.Float)
    is_user_active_last_week = db.Column(db.String(15))
    last_month_engagement_level = db.Column(db.String(15))
    last_month_total_listen_seconds = db.Column(db.Integer)
    last_month_average_listen_seconds = db.Column(db.Float)
    last_month_response_rate = db.Column(db.Float)
    last_month_prompt_response_rate = db.Column(db.Float)
    last_month_average_listen_rate = db.Column(db.Float)
    is_user_active_last_month = db.Column(db.String(15))
    last_delivered_content = db.Column(db.String(100))
    user_current_program = db.Column(db.String(100))
    current_module = db.Column(db.Integer)
