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

export type CertificateRequestStatus = 'pending' | 'approved' | 'rejected';

export interface ICertificateRequestDocument extends Document {
  user: Types.ObjectId;
  certificate_id: string;
  title: string;
  description?: string | null;
  issuer: string;
  issue_date: Date;
  completion_date?: Date | null;
  certificate_url: string;
  certificate_public_id: string;
  status: CertificateRequestStatus;
  admin_comment?: string | null;
  reviewed_by?: Types.ObjectId | null;
  reviewed_at?: Date | null;
  createdAt: Date;
  updatedAt: Date;
}

const certificateRequestSchema = new Schema<ICertificateRequestDocument>(
  {
    user: { type: Schema.Types.ObjectId, ref: 'User', required: true, index: true },
    certificate_id: { type: String, required: true, trim: true, uppercase: true, unique: true, index: 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 },
    status: { type: String, enum: ['pending', 'approved', 'rejected'], default: 'pending', index: true },
    admin_comment: { type: String, default: null, trim: true },
    reviewed_by: { type: Schema.Types.ObjectId, ref: 'Admin', default: null },
    reviewed_at: { type: Date, default: null },
  },
  { timestamps: true },
);

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

export default mongoose.model<ICertificateRequestDocument>('CertificateRequest', certificateRequestSchema);
