import { JsonResponse } from "@lib/responses/json-response";
import { NextFunction, Request, Response } from "express";
import { createValidator } from "express-joi-validation";
import Joi from "joi";

const validator = createValidator({ passError: true });

export const bodyValidator = validator.body;
export const queryValidator = validator.query;
export const paramsValidator = (schemaOrParam: Joi.Schema | string) =>
  typeof schemaOrParam === "string"
    ? validator.params(Joi.object({ [schemaOrParam]: Joi.string().required() }))
    : validator.params(schemaOrParam);

export const validationErrorHandler = (
  err,
  _req: Request,
  res: Response,
  next: NextFunction
) => {
  if (err && err.error && err.error.isJoi) {
    console.log(`err`, err.error);

    const errors = err.error.details.map((detail) => detail.message);
    return JsonResponse.validationError(
      {
        errors,
      },
      res
    );
  } else {
    // pass on to another error handler
    next(err);
  }
};