from . import db
from datetime import datetime


class Admin(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(150), unique=True, nullable=False)
    password = db.Column(db.String(150), nullable=False)  # plain for demo; hash in prod


class Client(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(150), unique=True, nullable=False)
    password = db.Column(db.String(150), nullable=False)
    first_name = db.Column(db.String(120))
    last_name = db.Column(db.String(120))
    provisioned = db.Column(db.Boolean, default=False)


class Provision(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    client_id = db.Column(db.Integer, db.ForeignKey('client.id'), nullable=True)
    first_name = db.Column(db.String(120))
    last_name = db.Column(db.String(120))
    email = db.Column(db.String(150))
    company = db.Column(db.String(200))
    job_title = db.Column(db.String(200))
    crm = db.Column(db.String(120))
    features = db.Column(db.String(300))
    comments = db.Column(db.Text)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    # Provision date (filled when accessed)
    provisioned_date = db.Column(db.DateTime, nullable=True)
    # COPILOT default: 30 DAYS
    copilot_term = db.Column(db.Integer, default=30)
    copilot_term_type = db.Column(db.String(20), default="days")
    # ATTRIBUTION default: 1 YEAR
    attribution_term = db.Column(db.Integer, default=1)
    attribution_term_type = db.Column(db.String(20), default="years")

    client = db.relationship('Client', backref=db.backref('provision_requests', lazy=True))
