import Joi from 'joi';

import { generateJoiValidation } from '@/shared/validations/generateJoiValidation';
import { Activity } from './activity.model';
import { objectId } from '@/shared/validations/custom.validation';

export const createActivity = () => {
  const baseValidation = generateJoiValidation(Activity.schema);

  return {
    body: baseValidation.keys({
      comment: Joi.string().allow('').optional(),
      isEmail: Joi.boolean().optional(),
      primaryEmail: Joi.string().allow('').optional(),
      secondaryEmail: Joi.string().allow('').optional(),
    }),
  };
};

export const updateActivity = () => ({
  query: Joi.object().keys({
    id: Joi.string().custom(objectId).required(),
  }),
  body: generateJoiValidation(Activity.schema, true),
});

export const getActivities = {
  query: Joi.object().keys({
    search: Joi.string(),
    lead: Joi.string().custom(objectId),
    task: Joi.string().custom(objectId),
    assignedTo: Joi.string().custom(objectId),
    status: Joi.string().valid('pending', 'completed', 'overdue'),
    sortBy: Joi.string(),
    limit: Joi.number().integer().min(1),
    page: Joi.number().integer().min(-1),
    includeTimeStamps: Joi.boolean(),
  }),
};

export const getActivityById = {
  params: Joi.object().keys({
    id: Joi.string().custom(objectId),
  }),
};

export const deleteActivityById = {
  params: Joi.object().keys({
    id: Joi.string().custom(objectId),
  }),
};
