# -*- coding:utf-8 -*- 


from extensions import db
from sqlalchemy import Index


class CIIndexValueInteger(db.Model):
    __tablename__ = "index_integers"

    value_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    ci_id = db.Column(db.Integer, db.ForeignKey('cis.ci_id'), nullable=False)
    attr_id = db.Column(db.Integer,
                        db.ForeignKey('ci_attributes.attr_id'),
                        nullable=False)
    ci = db.relationship("CI", backref="index_integers")
    attr = db.relationship("CIAttribute", backref="index_integers")
    value = db.Column(db.Integer, nullable=False)

    __table_args__ = (Index("attr_value_index", "attr_id", "value"), )


class CIIndexValueFloat(db.Model):
    __tablename__ = "index_floats"

    value_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    ci_id = db.Column(db.Integer, db.ForeignKey('cis.ci_id'), nullable=False)
    attr_id = db.Column(db.Integer,
                        db.ForeignKey('ci_attributes.attr_id'),
                        nullable=False)
    ci = db.relationship("CI", backref="index_floats")
    attr = db.relationship("CIAttribute", backref="index_floats")
    value = db.Column(db.Float, nullable=False)

    __table_args__ = (Index("attr_value_index", "attr_id", "value"), )


class CIIndexValueText(db.Model):
    __tablename__ = "index_texts"

    value_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    ci_id = db.Column(db.Integer, db.ForeignKey('cis.ci_id'), nullable=False)
    attr_id = db.Column(db.Integer,
                        db.ForeignKey('ci_attributes.attr_id'),
                        nullable=False)
    ci = db.relationship("CI", backref="index_texts")
    attr = db.relationship("CIAttribute", backref="index_texts")
    value = db.Column(db.String(128), nullable=False)

    __table_args__ = (Index("attr_value_index", "attr_id", "value"), )


class CIIndexValueDateTime(db.Model):
    __tablename__ = "index_datetime"

    value_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    ci_id = db.Column(db.Integer, db.ForeignKey('cis.ci_id'), nullable=False)
    attr_id = db.Column(db.Integer,
                        db.ForeignKey('ci_attributes.attr_id'),
                        nullable=False)
    ci = db.relationship("CI", backref="index_datetime")
    attr = db.relationship("CIAttribute", backref="index_datetime")
    value = db.Column(db.DateTime, nullable=False)

    __table_args__ = (Index("attr_value_index", "attr_id", "value"), )


class CIValueInteger(db.Model):
    __tablename__ = "integers"

    value_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    ci_id = db.Column(db.Integer, db.ForeignKey('cis.ci_id'), nullable=False)
    attr_id = db.Column(db.Integer,
                        db.ForeignKey('ci_attributes.attr_id'),
                        nullable=False)
    ci = db.relationship("CI", backref="integers")
    attr = db.relationship("CIAttribute", backref="integers")
    value = db.Column(db.Integer, nullable=False)


class CIValueFloat(db.Model):
    __tablename__ = "floats"

    value_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    ci_id = db.Column(db.Integer, db.ForeignKey('cis.ci_id'), nullable=False)
    attr_id = db.Column(db.Integer,
                        db.ForeignKey('ci_attributes.attr_id'),
                        nullable=False)
    ci = db.relationship("CI", backref="floats")
    attr = db.relationship("CIAttribute", backref="floats")
    value = db.Column(db.Float, nullable=False)


class CIValueText(db.Model):
    __tablename__ = "texts"

    value_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    ci_id = db.Column(db.Integer, db.ForeignKey('cis.ci_id'), nullable=False)
    attr_id = db.Column(db.Integer,
                        db.ForeignKey('ci_attributes.attr_id'),
                        nullable=False)
    ci = db.relationship("CI", backref="texts")
    attr = db.relationship("CIAttribute", backref="texts")
    value = db.Column(db.Text, nullable=False)


class CIValueDateTime(db.Model):
    __tablename__ = "datetime"

    value_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    ci_id = db.Column(db.Integer, db.ForeignKey('cis.ci_id'), nullable=False)
    attr_id = db.Column(db.Integer,
                        db.ForeignKey('ci_attributes.attr_id'),
                        nullable=False)
    ci = db.relationship("CI", backref="datetime")
    attr = db.relationship("CIAttribute", backref="datetime")
    value = db.Column(db.DateTime, nullable=False)