"""Data models."""
from . import db
from flask_login import UserMixin


class Users(db.Model, UserMixin):
    """Data model for user accounts."""

    __tablename__ = 'users'
    id = db.Column(
        db.Integer,
        primary_key=True
    )
    username = db.Column(
        db.String(64),
        index=False,
        unique=True,
        nullable=False
    )
    email = db.Column(
        db.String(80),
        index=True,
        unique=True,
        nullable=False
    )
    password = db.Column(db.String(80))    
    created = db.Column(
        db.DateTime,
        index=False,
        unique=False,
        nullable=False
    )

    admin = db.Column(
        db.Boolean,
        index=False,
        unique=False,
        nullable=False
    )

    def __repr__(self):
        return '<User {}>'.format(self.username)

    def __init__(self, username, password, admin, email, created):
        self.username = username
        self.password = password
        self.admin = admin
        self.email = email
        self.created = created

class notes(db.Model):
    __tablename__ = 'notes'
    id = db.Column(
        db.Integer,
        primary_key=True
    )

    cow_id = db.Column(
        db.Integer,
        index=False,
        unique=False,
        nullable=True
    )

    note_log_date =db.Column(
        db.String(64),
        nullable=True
    )

    created_on =db.Column(
        db.String(64),
        nullable=False
    )

    note_type = db.Column(
        db.String(64),
        index=False,
        unique=False,
        nullable=True
    )

    user_id = db.Column(
        db.Integer,
        index=False,
        unique=False,
        nullable=False
    )

    note_text = db.Column(
        db.String(64),
        index=False,
        unique=False,
        nullable=True
    )    
    hidden =db.Column(
        db.Boolean,
        index=False,
        unique=False,
        nullable=False
    )

class lists_tbl(db.Model):
    __tablename__ = 'lists_tbl'
    id = db.Column(
        db.Integer,
        primary_key=True
    )
    list_name = db.Column(
        db.String(64),
        index=False,
        unique=False,
        nullable=False
    )       
    hidden =db.Column(
        db.Boolean,
        index=False,
        unique=False,
        nullable=False
    )


class cow_list(db.Model):
    __tablename__ = 'cow_list'
    id = db.Column(
        db.Integer,
        primary_key=True
    )
    list_id = db.Column(
        db.Integer,
        db.ForeignKey('lists_tbl.id'),
        primary_key=False
        
    )
    cow_id = db.Column(
        db.Integer,
        primary_key=False
    )
    hidden =db.Column(
        db.Boolean,
        index=False,
        unique=False,
        nullable=False
    )


class breeder_tag_cow_details(db.Model):
    __tablename__ = 'breeder_tag_cow_details'
    id = db.Column(
        db.Integer,
        primary_key=True
    )
    cow_id = db.Column(
        db.Integer,
        primary_key=False
        
    )
    breeder_tag_id = db.Column(
        db.Integer,
        primary_key=False
    )
    breeder_tag_tag = db.Column(
        db.Integer,
        primary_key=False
    )
    eartag = db.Column(
        db.String(64),
        index=False,
        unique=False,
        nullable=False
    )    


class hc_cow_details(db.Model):
    __tablename__ = 'hc_cow_details'
    id = db.Column(
        db.Integer,
        primary_key=True
    )
    herd_number = db.Column(
        db.Integer,
        primary_key=False
        
    )
    hc_cow_id = db.Column(
        db.Integer,
        primary_key=False
        
    )
    cow_number = db.Column(
        db.Integer,
        primary_key=False
        
    )
    eartag = db.Column(
        db.String(64),
        index=False,
        unique=False,
        nullable=False
    )




class ip_address(db.Model):
    __tablename__ = 'ip_address'
    id = db.Column(
        db.Integer,
        primary_key=True
    )
    ip_address = db.Column(
        db.String(64),
        primary_key=False
        
    )    
    dt_stamp = db.Column(
        db.String(64),
        primary_key=False
    )

class open_ai_haro(db.Model):
    
    __tablename__ = 'openaidata'
    
    id = db.Column(
        db.Integer,
        primary_key=True
    )
    dt_stamp = db.Column(
        db.String(64),
        primary_key=False
    )
    query_email = db.Column(
        db.String(100),
        index=False,
        unique=False,
        nullable=True
    )
    query_summary = db.Column(
        db.String(500),
        index=False,
        unique=False,
        nullable=True
    )
    query_response = db.Column(
        db.String(1000),
        index=False,
        unique=False,
        nullable=True
    )
    full_query = db.Column(
        db.String(2000),
        index=False,
        unique=False,
        nullable=True
    )
    response_to_submit = db.Column(
        db.String(2000),
        index=False,
        unique=False,
        nullable=True
    )    