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

const RefundSchema = new Schema(
  {
    _id: stringId,
    bookingId: { type: String, ref: "Booking", required: true, index: true },
    customerId: { type: String, ref: "User", required: true, index: true },
    ownerId: { type: String, ref: "User", required: true, index: true },
    type: { type: String, enum: REFUND_TYPES, required: true },
    amountLyd: { type: Number, required: true },
    amountTnd: { type: Number, required: true },
    reasonCode: { type: String, enum: REFUND_REASON_CODES, required: true },
    reasonNote: { type: String, default: undefined },
    platformFeeClawbackTnd: { type: Number, default: 0 },
    ownerPayoutClawbackTnd: { type: Number, default: 0 },
    createdBy: { type: String, ref: "User", default: undefined },
    walletCreditedLyd: { type: Number, default: 0 },
    source: { type: String, enum: ["ADMIN", "CANCEL", "OWNER_REJECT"], default: "ADMIN" },
  },
  { timestamps: true },
);

RefundSchema.index({ createdAt: -1 });
applyIdTransform(RefundSchema);

export const Refund = registerModel("Refund", RefundSchema);
