import uuid
from datetime import datetime
from extensions import db

class User(db.Model):
    __tablename__ = 'users'
    id          = db.Column(db.Integer, primary_key=True)
    uuid        = db.Column(db.String(36), unique=True, nullable=False, default=lambda: str(uuid.uuid4()))
    email       = db.Column(db.String(120), unique=True, nullable=False)
    senha_hash  = db.Column(db.String(256), nullable=False)
    plano       = db.Column(db.String(20), nullable=False, default='gratuito')
    criado_em   = db.Column(db.DateTime, default=datetime.utcnow)

    premium_expira_em       = db.Column(db.DateTime, nullable=True)
    extensao_cortesia_usada = db.Column(db.Boolean, default=False)

    pacientes   = db.relationship('Paciente', backref='dono', lazy=True, cascade='all, delete-orphan')

class Paciente(db.Model):
    __tablename__ = 'pacientes'
    id          = db.Column(db.Integer, primary_key=True)
    uuid        = db.Column(db.String(36), unique=True, nullable=False, default=lambda: str(uuid.uuid4()))
    nome        = db.Column(db.String(100), nullable=False)
    user_id     = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
    criado_em   = db.Column(db.DateTime, default=datetime.utcnow)

    ativo       = db.Column(db.Boolean, default=True)

    palavras    = db.relationship('Palavra', backref='paciente', lazy=True, cascade='all, delete-orphan')
    interacoes  = db.relationship('Interacao', backref='paciente', lazy=True, cascade='all, delete-orphan')

class Palavra(db.Model):
    __tablename__ = 'palavras'
    id          = db.Column(db.Integer, primary_key=True)
    texto       = db.Column(db.String(100), nullable=False)
    emoji       = db.Column(db.String(10), nullable=True)
    imagem      = db.Column(db.String(200), nullable=True)
    categoria   = db.Column(db.String(30), nullable=False, default='cat-objeto')
    ordem       = db.Column(db.Integer, default=0)
    da_biblioteca = db.Column(db.Boolean, default=False)
    paciente_id = db.Column(db.Integer, db.ForeignKey('pacientes.id'), nullable=False)

class Interacao(db.Model):
    __tablename__ = 'interacoes'
    id          = db.Column(db.Integer, primary_key=True)
    paciente_id = db.Column(db.Integer, db.ForeignKey('pacientes.id'), nullable=False)

    texto       = db.Column(db.String(100), nullable=False)
    categoria   = db.Column(db.String(30), nullable=False)

    criado_em   = db.Column(db.DateTime, default=datetime.utcnow)