import Joi from 'joi';

import { objectId } from '@/shared/validations/custom.validation';

export const unitBody = Joi.object({
  unitNumber: Joi.string().trim().required(),
  size: Joi.number().positive().required(),
  price: Joi.number().positive().required(),
  floor: Joi.number().integer().allow(null),
  status: Joi.string()
    .valid('sold', 'hold', 'available')
    .default('available'),
  block: Joi.string().allow(null),
  propertyType: Joi.string().custom(objectId).required(),
  customFields: Joi.object().default({}),
});

export const getUnits = {
  query: Joi.object().keys({
    project: Joi.string().custom(objectId),
    propertyType: Joi.string().custom(objectId),
    status: Joi.string().valid('sold', 'hold', 'available'),
    sortBy: Joi.string(),
    limit: Joi.number().integer().min(1),
    page: Joi.number().integer().min(-1),
    populate: Joi.string(),
    includeTimeStamps: Joi.boolean(),
    fields: Joi.string(),
  }),
};

export const uploadUnitsExcel = {
  body: Joi.object().keys({
    propertyType: Joi.string().custom(objectId).required(),
  }),
};

export const getUnitsByProjectId = {
  params: Joi.object().keys({
    projectId: Joi.string().custom(objectId).required(),
  }),
  query: Joi.object().keys({
    propertyType: Joi.string().custom(objectId),
    status: Joi.string().valid('sold', 'hold', 'available'),
    statuses: Joi.string(),
    createdBy: Joi.string().custom(objectId),
    companyId: 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(),
    fields: Joi.string(),
    includeTimeStamps: Joi.boolean(),
  }),
};

export const createUnit = () => ({
  params: Joi.object().keys({
    projectId: Joi.string().custom(objectId).required(),
  }),
  body: unitBody,
});

export const updateUnit = () => ({
  params: Joi.object().keys({
    projectId: Joi.string().custom(objectId).required(),
    id: Joi.string().custom(objectId).required(),
  }),
  body: unitBody,
});

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

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

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