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

from hodor import db
from sqlalchemy import inspect
from sqlalchemy_utils import PasswordType

class User(db.Model):
    __tablename__ = 'users'

    # Values entered by the user
    username = db.Column(db.String(32), primary_key=True, nullable=False)
    first_name = db.Column(db.String(32), nullable=False)
    last_name = db.Column(db.String(32), nullable=False)
    email = db.Column(db.String(64), unique=True, nullable=False)
    country = db.Column(db.String(64))
    '''PasswordType is an awesome function. To check for passwords later, 
        you can just do user['password'] == 'plaintext' for a boolean response.'''
    password = db.Column(PasswordType(
        schemes=[
            'pbkdf2_sha512',
            'md5_crypt'
        ],
        deprecated=['md5_crypt']
    ), nullable=False)

    # Platform values
    disabled = db.Column(db.Boolean, default=False)
    verified_account = db.Column(db.Boolean, default=False)
    verification_code = db.Column(db.String(32), nullable=False)

    def __unicode__(self):
        return unicode(self.username)

    def save(self):
        print type(self)
        print self.email
        db.session.add(self)
        db.session.commit()

    @staticmethod
    def get_all():
        return User.query.all()

    def get_all_dict(self):
        return {c.key: getattr(self, c.key)
                for c in inspect(self).mapper.column_attrs}

    def delete(self):
        db.session.delete(self)
        db.session.commit()

    def __repr__(self):
        return "<User: {}>".format(self.name)