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

export interface IUserCertificateDocument extends Document {
  certificate_id: string;
  user: Types.ObjectId;
  request: Types.ObjectId;
  title: string;
  description?: string | null;
  issuer: string;
  issue_date: Date;
  completion_date?: Date | null;
  certificate_url: string;
  certificate_public_id: string;
  createdAt: Date;
  updatedAt: Date;
}

const userCertificateSchema = new Schema<IUserCertificateDocument>(
  {
    certificate_id: { type: String, required: true, trim: true, uppercase: true, unique: true, index: true },
    user: { type: Schema.Types.ObjectId, ref: 'User', required: true, index: true },
    request: { type: Schema.Types.ObjectId, ref: 'CertificateRequest', required: true, unique: true },
    title: { type: String, required: true, trim: true },
    description: { type: String, default: null, trim: true },
    issuer: { type: String, required: true, trim: true },
    issue_date: { type: Date, required: true },
    completion_date: { type: Date, default: null },
    certificate_url: { type: String, required: true },
    certificate_public_id: { type: String, required: true },
  },
  { timestamps: true },
);

userCertificateSchema.index({ user: 1, createdAt: -1 });

export default mongoose.model<IUserCertificateDocument>('UserCertificate', userCertificateSchema);
