import { Request, Response } from 'express';

import catchAsync from '@/shared/utils/catchAsync';
import * as amenitiesService from '@/modules/master/constructionStatus/amenities/amenities.service';
import responseCodes from '@/shared/utils/responseCode/responseCode';
import { pick } from '@/shared/utils';

const { AmenitiesResponseCodes } = responseCodes;

export const create = catchAsync(async (req: Request, res: Response) => {
  const result = await amenitiesService.create(req.body);
  res.success(result, AmenitiesResponseCodes.SUCCESS, 'Amenities Created Successfully');
});

export const get = catchAsync(async (req: Request, res: Response) => {
  const result = await amenitiesService.getById(req.params.id);
  res.success(result, AmenitiesResponseCodes.SUCCESS, 'Amenities Fetched Successfully');
});

export const update = catchAsync(async (req: Request, res: Response) => {
  await amenitiesService.update(req.params.id, req.body);
  res.success(true, AmenitiesResponseCodes.SUCCESS, 'Amenities Updated Successfully');
});

export const remove = catchAsync(async (req: Request, res: Response) => {
  await amenitiesService.remove(req.params.id);
  res.success(true, AmenitiesResponseCodes.SUCCESS, 'Amenities Deleted Successfully');
});

export const list = catchAsync(async (req: Request, res: Response) => {
  const filters = pick(req.query, ['search']);

  const options = pick(req.query, [
    'sortBy',
    'limit',
    'page',
    'populate',
    'fields',
  ]);

  const result = await amenitiesService.queryAmenities(filters, options);
  res.success(result, AmenitiesResponseCodes.SUCCESS, 'Amenities Fetched Successfully');
});
