import Joi from 'joi';
import { generateJoiValidation } from '@/shared/validations/generateJoiValidation';
import { CaptureLead } from './captureLeads.model';
import { objectId } from '@/shared/validations/custom.validation';

// Create Capture Lead
export const createCaptureLead = () => ({
  body: generateJoiValidation(CaptureLead.schema, true).keys({
    metaPageDbId: Joi.string().allow(null).optional(),
  }),
});

// Update Capture Lead
export const updateCaptureLead = () => ({
  params: Joi.object().keys({
    id: Joi.string().custom(objectId).required(),
  }),
  body: Joi.object().keys({
    name: Joi.string(),
    platform: Joi.string(),
    interestType: Joi.string(),
    isActive: Joi.boolean(),
    source: Joi.alternatives().try(
      Joi.string().custom(objectId),
      Joi.valid(null),
    ),
    sourceId: Joi.alternatives().try(
      Joi.string().custom(objectId),
      Joi.valid(null),
    ),
    project: Joi.alternatives().try(
      Joi.string().custom(objectId),
      Joi.valid(null),
    ),
    projectId: Joi.alternatives().try(
      Joi.string().custom(objectId),
      Joi.valid(null),
    ),
    assignmentMode: Joi.string().valid('equal', 'roundRobin', 'specificUser'),
    team: Joi.alternatives().try(
      Joi.string().custom(objectId),
      Joi.valid(null),
    ),
    assignedTo: Joi.array().items(Joi.string().custom(objectId)),
    userIds: Joi.array().items(Joi.string().custom(objectId)),
    assignment: Joi.object({
      mode: Joi.string().valid('equal', 'roundRobin', 'specificUser'),
      team: Joi.alternatives().try(
        Joi.string().custom(objectId),
        Joi.valid(null),
      ),
      teamId: Joi.alternatives().try(
        Joi.string().custom(objectId),
        Joi.valid(null),
      ),
      users: Joi.array().items(
        Joi.alternatives().try(
          Joi.string().custom(objectId),
          Joi.object({ id: Joi.string().custom(objectId).required() }),
        ),
      ),
      userIds: Joi.array().items(Joi.string().custom(objectId)),
    }),
  }),
});

// Get Capture Lead List / Query
export const getCaptureLead = {
  query: Joi.object().keys({
    search: Joi.string(),
    platform: Joi.string(),
    interestType: Joi.string(),
    from: Joi.string().isoDate(),
    to: Joi.string().isoDate(),
    sortBy: Joi.string(),
    limit: Joi.number().integer().min(1),
    page: Joi.number().integer().min(-1),
    includeTimeStamps: Joi.boolean(),
  }),
};

// Get Capture Lead by ID
export const getCaptureLeadById = {
  params: Joi.object().keys({
    id: Joi.string().custom(objectId).required(),
  }),
};

// Delete Capture Lead by ID
export const deleteCaptureLeadById = {
  params: Joi.object().keys({
    id: Joi.string().custom(objectId).required(),
  }),
};
