import Joi from 'joi';

import { generateJoiValidation } from '@/shared/validations/generateJoiValidation';
import { Targets } from '@/modules/targets/targets.model';
import { objectId } from '@/shared/validations/custom.validation';
import { TargetType } from '@/shared/constants/enum.constant';

export const createTargets = {
  body: Joi.object({
    targetType: Joi.string()
      .valid(TargetType.Individual, TargetType.WholeTeam)
      .required(),

    period: Joi.object({
      month: Joi.number().integer().min(1).max(12).required(),
      year: Joi.number().integer().min(2000).max(2100).required(),
    }).required(),

    team: Joi.string().custom(objectId).required(),

    member: Joi.when('targetType', {
      is: TargetType.Individual,
      then: Joi.string().custom(objectId).required(),
      otherwise: Joi.forbidden(),
    }),

    salesAmount: Joi.number().min(0).default(0),
    unitsSold: Joi.number().min(0).default(0),
    meetings: Joi.number().min(0).default(0),
    siteVisits: Joi.number().min(0).default(0),
    calls: Joi.number().min(0).default(0),
  }),
};

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

export const getTargets = {
  query: Joi.object().keys({
    name: Joi.string(),
    sortBy: Joi.string(),
    search: Joi.string(),
    limit: Joi.number().integer().min(1),
    page: Joi.number().integer().min(-1),
    companyId: Joi.string(),
    includeTimeStamps: Joi.boolean(),
  }),
};

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

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