import Joi from 'joi';

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

export const createPropertyFile = () => ({
  body: {
    category: Joi.string().required(),
    propertyId: Joi.string().custom(objectId).required(),
    name: Joi.string().required(),
    size: Joi.string().required(),
    fileType: Joi.string().required(),
    fileUrl: Joi.string().required(),
    description: Joi.string().allow('', null),
  },
});

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

export const getPropertyFiles = {
  query: Joi.object().keys({
    name: Joi.string().optional(),
    category: Joi.string(),
    propertyId: Joi.string().custom(objectId),
    size: Joi.string(),
    createdBy: Joi.string().custom(objectId),
    status: Joi.string(),
    sortBy: Joi.string(),
    search: Joi.string(),
    limit: Joi.number().integer().min(1),
    page: Joi.number().integer().min(-1),
    includeTimeStamps: Joi.boolean(),
  }),
};

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

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