import { Schema } from "mongoose";
import { applyIdTransform, registerModel, stringId } from "../schema";
import { WALLET_TXN_TYPES } from "../types";

const WalletTxnSchema = new Schema(
  {
    _id: stringId,
    walletId: { type: String, ref: "Wallet", required: true, index: true },
    userId: { type: String, ref: "User", required: true, index: true },
    type: { type: String, enum: WALLET_TXN_TYPES, required: true },
    /** Positive = credit, negative = debit */
    amountLyd: { type: Number, required: true },
    balanceAfter: { type: Number, required: true },
    bookingId: { type: String, ref: "Booking", default: undefined },
    topUpId: { type: String, ref: "WalletTopUp", default: undefined },
    note: { type: String, default: undefined },
    meta: { type: Schema.Types.Mixed, default: undefined },
  },
  { timestamps: { createdAt: true, updatedAt: false } },
);

WalletTxnSchema.index({ userId: 1, createdAt: -1 });
applyIdTransform(WalletTxnSchema);

export const WalletTxn = registerModel("WalletTxn", WalletTxnSchema);
