import { Request, Response } from 'express';

import * as paymentTermService from '@/modules/project/paymentTerms/paymentTerms.service';
import catchAsync from '@/shared/utils/catchAsync';
import responseCodes from '@/shared/utils/responseCode/responseCode';
import { pick } from '@/shared/utils';

const { PaymentTermResponseCodes } = responseCodes;

export const createPaymentTerm = catchAsync(async (req: Request, res: Response) => {
  const result = await paymentTermService.createPaymentTerm(req.body);
  res.success(result, PaymentTermResponseCodes.SUCCESS, 'PaymentTerm Created Successfully');
});

export const updatePaymentTerm = catchAsync(async (req: Request, res: Response) => {
  const { id } = pick(req.params, ['id']);

  const result = await paymentTermService.updatePaymentTerm(id, req.body);
  res.success(result, PaymentTermResponseCodes.SUCCESS, 'PaymentTerm Updated Successfully');
});

export const deletePaymentTermById = catchAsync(async (req: Request, res: Response) => {
  const { id } = pick(req.params, ['id']);

  const result = await paymentTermService.deletePaymentTerm(id);
  res.success(result, PaymentTermResponseCodes.SUCCESS, 'PaymentTerm Deleted Successfully');
});

export const getPaymentTermById = catchAsync(async (req: Request, res: Response) => {
  const { id } = pick(req.params, ['id']);

  const result = await paymentTermService.getPaymentTermById(id);
  res.success(result, PaymentTermResponseCodes.SUCCESS, 'PaymentTerm Fetched Successfully');
});

export const getPaymentTerms = catchAsync(async (req: Request, res: Response) => {
  const filter = pick(req.query, ['project', 'search']);
  const options = pick(req.query, ['sortBy', 'limit', 'page', 'populate', 'includeTimeStamps']);

  const result = await paymentTermService.queryPaymentTerms(filter, options);
  res.success(result, PaymentTermResponseCodes.SUCCESS, 'PaymentTerms Fetched Successfully');
});
