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

const userSchema = new Schema<IUserInfo>(
  {
    company_id: {
      type: Schema.Types.ObjectId,
      ref: 'Company',
      required: true,
    },
    company_name: {
      type: String,
      required: true,
    },
    firstName: {
      type: String,
      required: true,
    },
    lastName: {
      type: String,
      required: true,
    },
    isCompany: {
      type: Boolean,
      default: false,
    },
    isActive: {
      type: Boolean,
      default: false,
    },
    userType: {
      type: String,
      required: true,
      enum: ['company', 'staff', 'rider'],
    },
    role_id: {
      type: Schema.Types.ObjectId,
      ref: 'Role',
    },
    email: {
      type: String,
      required: true,
      unique: true,
    },
    password: {
      type: String,
      required: true,
    },
    phoneNumber: {
      type: String,
      required: true,
      unique: true,
    },
    address: {
      type: String,
      required: function (this: IUserInfo) {
        return this.userType === 'rider';
      },
    },
    noOfAssignedOrders: {
      type: Number,
    },
    inTransit: {
      type: Boolean,
    },
    deviceTokens: {
      type: Object({
        android:[],
        ios:[]
      })
    },
    noOfCompletedOrders: {
      type: Number,
    },
  },
  {
    timestamps: true,
    toObject: {
      transform(_doc, ret) {
        delete ret.password;
        delete ret.__v;
      },
    },
    toJSON: {
      transform(_doc, ret) {
        delete ret.password;
        delete ret.__v;
      },
    },
  },
);

userSchema.plugin(paginate);
const User = model<IUserInfo, PaginateModel<IUserInfo>>('User', userSchema);

export = User;
