/* eslint-disable func-names */
/* eslint-disable no-param-reassign */
import { Schema, model } from 'mongoose';
import { IRoleInfo } from '../utils/types';

// const getAssignedUsers = (users: any) =>
//   users &&
//   users.map(({ _id, firstName, lastName }: { [key: string]: string }) => ({
//     _id,
//     firstName,
//     lastName,
//   }));

const roleSchema = new Schema<IRoleInfo>(
  {
    company_id: {
      type: Schema.Types.ObjectId,
      required: true,
      ref: 'Company',
    },
    role: {
      type: String,
      required: true,
    },
    permissions: {
      type: [String],
      required: true,
    },
  },
  {
    timestamps: true,
    toJSON: {
      getters: true,
      virtuals: true,
      transform(_doc, ret) {
        delete ret.__v;
        // ret.roleUsers = getAssignedUsers(ret.roleUsers);
      },
    },
  },
);

roleSchema.virtual('roleUsers', {
  ref: 'User',
  localField: '_id',
  foreignField: 'role_id',
});

// roleSchema.pre('find', function (next) {
//   this.populate('roleUsers');
//   next();
// });

const Role = model<IRoleInfo>('Role', roleSchema);

export = Role;
