import mongoose, { Schema, Document } from 'mongoose';

export interface IRewardRedemption extends Document {
  user: mongoose.Types.ObjectId;
  reward: mongoose.Types.ObjectId; // references RewardCatalog
  status: 'pending' | 'approved' | 'rejected' | 'fulfilled';
  requestedAt: Date;
  processedAt?: Date;
  adminNote?: string;
}

const rewardRedemptionSchema: Schema<IRewardRedemption> = new Schema<IRewardRedemption>({
  user: { type: Schema.Types.ObjectId, ref: 'User', required: true },
  reward: { type: Schema.Types.ObjectId, ref: 'RewardCatalog', required: true },
  status: { type: String, enum: ['pending', 'approved', 'rejected', 'fulfilled'], default: 'pending' },
  requestedAt: { type: Date, default: Date.now },
  processedAt: { type: Date },
  adminNote: { type: String },
});

// Prevent duplicate redemptions for the same user and reward
rewardRedemptionSchema.index({ user: 1, reward: 1 }, { unique: true });

export default mongoose.model<IRewardRedemption>('RewardRedemption', rewardRedemptionSchema);
