import { Model, model, Schema } from "mongoose";
import { ITripShare } from "../interfaces/models/tripShareInterface";

const TripShareSchema = new Schema<ITripShare>(
  {
    tripId: {
      type: Schema.Types.ObjectId,
      ref: "trips",
      required: true,
      index: true,
    },
    sharedBy: {
      type: Schema.Types.ObjectId,
      ref: "User",
      required: true,
      index: true,
    },
    sharedWith: {
      type: Schema.Types.ObjectId,
      ref: "User",
      required: true,
      index: true,
    },
    status: {
      type: String,
      enum: ["active", "revoked"],
      default: "active",
      required: true,
      index: true,
    },
  },
  { timestamps: true },
);

TripShareSchema.index(
  { tripId: 1, sharedWith: 1 },
  {
    unique: true,
    partialFilterExpression: { status: "active" },
    name: "tripId_sharedWith_active_unique",
  },
);
TripShareSchema.index({ sharedWith: 1, status: 1, createdAt: -1 });
TripShareSchema.index({ sharedBy: 1, status: 1, createdAt: -1 });

const TripShareModel: Model<ITripShare> = model<ITripShare>(
  "TripShare",
  TripShareSchema,
);

export default TripShareModel;
