import mongoose, { Schema, Document } from 'mongoose';

export interface IRoleDocument extends Document {
  _id: any;
  name: string; // Role name (e.g., "System Administrator", "Technician")
  code: string; // Unique code (e.g., "ADMIN", "TECHNICIAN")
  description?: string;
  permissions: Record<string, boolean>; // Key-value pairs of permission keys and their boolean values
  isSystem: boolean; // System roles cannot be deleted
  isActive: boolean;
  createdAt: Date;
  updatedAt: Date;
}

const roleSchema = new Schema<IRoleDocument>(
  {
    _id: { type: Schema.Types.Mixed, default: () => new mongoose.Types.ObjectId().toString() },
    name: { type: String, required: true, unique: true },
    code: { type: String, required: true, unique: true, uppercase: true },
    description: String,
    permissions: { type: Schema.Types.Mixed, default: {} }, // Flexible object for permissions
    isSystem: { type: Boolean, default: false },
    isActive: { type: Boolean, default: true },
  },
  {
    timestamps: true,
    strict: false,
  }
);

// Indexes
roleSchema.index({ isActive: 1 });

export const Role = mongoose.model<IRoleDocument>('Role', roleSchema);
