from datetime import datetime
from routes.v1 import db

from .programs import TimestampMixin

class Gender(db.Model, TimestampMixin):
    __tablename__ = 'gender'
    gender_id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(40), nullable=False)
    public_id = db.Column(db.String(255), unique=True, index=True, nullable=False)

    def serialize(self):
        return {
            'gender_id' : self.gender_id,
            'name' : self.name,
            'public_id' : self.public_id
        }

class Country(db.Model, TimestampMixin):
    __tablename__ = 'countries'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(40), nullable=False)
    code = db.Column(db.String(10), nullable=False, index=True, unique=True)
    public_id = db.Column(db.String(255), unique=True, index=True, nullable=False)

    def serialize(self):
        return {
            'id' : self.id,
            'name' : self.name,
            'public_id' : self.public_id,
            'code' : self.code
        }

class Volunteers(db.Model, TimestampMixin):
    __table_name = 'volunteers'
    id = db.Column(db.Integer, primary_key=True)
    public_id = db.Column(db.String(255), nullable=False, index=True, unique=True)
    title = db.Column(db.String(10), nullable=True)
    first_name = db.Column(db.String(60), nullable=False)
    sur_name = db.Column(db.String(60), nullable=False)
    gender = db.Column(db.String(255), nullable=False, index=True)
    dob = db.Column(db.DateTime, nullable=False)
    id_alien_number = db.Column(db.String(50), nullable=False, index=True)
    postal_address = db.Column(db.String(150), nullable=False, index=True)
    postal_code = db.Column(db.Integer, nullable=False, index=True)
    email = db.Column(db.String(200), nullable=False, index=True)
    tel_number = db.Column(db.String(50), nullable=False, index=True)
    expiry_date = db.Column(db.String(200), nullable=True)
    program_id = db.Column(db.String(255), nullable=True, index=True)
    place_of_issue = db.Column(db.String(200), nullable=True)
    date_of_issue = db.Column(db.DateTime, nullable=True)
    dietary = db.Column(db.Text, nullable=True)
    profile_image = db.Column(db.String(255), nullable=True)
    country = db.Column(db.String(255),nullable=False, index=True)
    payment_status = db.Column(db.Integer, nullable=True)
    salesforce_flag = db.Column(db.Integer, nullable=True)
    salesforce_uuid = db.Column(db.String(100), nullable=True, unique=True, index=True)

    def serialize(self):
        return {
            'public_id': self.public_id,
            'first_name': self.first_name,
            'sur_name' : self.sur_name,
            'gender' : self.gender,
            'dob' : self.dob,
            'id_alien_number' : self.id_alien_number,
            'title' : self.title,
            'postal_address' : self.postal_address,
            'postal_code' : self.postal_code,
            'email' : self.email,
            'country' : self.country,
            'tel_number' : self.tel_number,
            'status': self.status,
            'image' : self.profile_image,
            'status' : self.payment_status,
            'salesforce_uuid' : self.salesforce_uuid,
            'salesforce_flag' : self.salesforce_flag
        }