from app.extensions import db


class Account(db.Model):
    __tablename__ = 'accounts'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(200), nullable=False)
    type = db.Column(db.String(20), nullable=False)        # checking / savings / credit / loan
    institution_name = db.Column(db.String(200), nullable=True)
    is_active = db.Column(db.Boolean, nullable=False, default=True)

    # Credit card / Phase 2 fields — nullable, required for Epic 6
    current_balance = db.Column(db.Numeric(10, 2), nullable=True)
    apr = db.Column(db.Numeric(6, 4), nullable=True)       # e.g. 19.9900 for 19.99%
    min_payment = db.Column(db.Numeric(10, 2), nullable=True)
    credit_limit = db.Column(db.Numeric(10, 2), nullable=True)

    created_at = db.Column(db.DateTime, server_default=db.func.now(), nullable=False)

    # Relationships
    transactions = db.relationship('Transaction', back_populates='account', lazy='dynamic')
    paydown_plan_cards = db.relationship('PaydownPlanCard', back_populates='account', lazy='dynamic')
    balance_updates = db.relationship('PaydownBalanceUpdate', back_populates='account', lazy='dynamic')
