import { Document, Model, Schema, Types, model } from "mongoose";

export interface IUserSubscription extends Document {
  userId: Types.ObjectId;
  planId: Types.ObjectId;
  status: "active" | "canceled" | "expired" | "past_due";
  stripeSubscriptionId?: string;
  purchasedAt: Date;
  expiresAt?: Date;
  metadata?: Record<string, unknown>;
}

const UserSubscriptionSchema = new Schema<IUserSubscription>(
  {
    userId: { type: Schema.Types.ObjectId, ref: "User", required: true },
    planId: {
      type: Schema.Types.ObjectId,
      ref: "SubscriptionPlan",
      required: true,
    },
    status: {
      type: String,
      enum: ["active", "canceled", "expired", "past_due"],
      default: "active",
    },
    stripeSubscriptionId: { type: String, trim: true },
    purchasedAt: { type: Date, default: () => new Date() },
    expiresAt: { type: Date },
    metadata: { type: Schema.Types.Mixed },
  },
  { timestamps: true }
);

UserSubscriptionSchema.index({ userId: 1, status: 1 });

const UserSubscriptionModel: Model<IUserSubscription> = model<IUserSubscription>(
  "UserSubscription",
  UserSubscriptionSchema
);

export default UserSubscriptionModel;
