from mongoengine import Document, ReferenceField, StringField, IntField, DateTimeField
from models.PaymentOrder import PaymentOrder

from datetime import datetime
from models.user import User

class TransactionHistory(Document):
    parent_id = ReferenceField(PaymentOrder, default=None)  # e.g., PaymentOrder ID
    user_id = ReferenceField(User, required=True)          # whose wallet changed
    transaction_type = StringField(default=None)           # e.g., "referral_bonus", "course_purchase"
    entry_type = StringField(default=None, choices=[None, 'credit', 'debit'])
    amount = IntField(default=None, min_value=0)           # coins
    description = StringField(default=None)
    related_user_id = ReferenceField(User, default=None)   # e.g., referred user
    balance_before = IntField(required=True, min_value=0)
    balance_after = IntField(required=True, min_value=0)
    transaction_status = IntField(default=0)               # 0=pending, 1=success
    created_date = DateTimeField(default=datetime.utcnow)

    meta = {
        'collection': 'transaction_history',
        'indexes': ['user_id', 'created_date', 'transaction_type']
    }
