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

export const createCampaign = () => ({
  body: generateJoiValidation(Campaign.schema).keys({
    name: Joi.string().required(),
    company: Joi.string().custom(objectId),
    category: Joi.string().custom(objectId),
    subCategories: Joi.array().items(Joi.string().custom(objectId)),
    targetedCity: Joi.array().items(Joi.string().custom(objectId)),
    targetedAreas: Joi.array().items(Joi.string().custom(objectId)),
    channel: Joi.array().items(Joi.string().valid('whatsapp', 'email', 'sms')),
  }),
});

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

export const getCampaigns = {
  query: Joi.object().keys({
    status: Joi.string().valid('running', 'draft', 'pending', 'all'),
    company: Joi.string().custom(objectId),
    search: Joi.string(),
    sortBy: Joi.string(),
    limit: Joi.number().integer().min(1),
    page: Joi.number().integer().min(-1),
    populate: Joi.string(),
    includeTimeStamps: Joi.boolean(),
  }),
};

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

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