import { NextFunction, Response } from "express";
import { z, ZodError } from "zod";
import { fromError } from "zod-validation-error";
import log from "../config/log";
import CustomRequest from "../types/requestType";

function validateData(schema: z.ZodObject<any, any>) {
  return (req: CustomRequest, res: Response, next: NextFunction) => {
    try {
      schema.parse({
        ...req.body,
        typeId: parseFloat(req.body.typeId),
      });
      next();
    } catch (error: any) {
      if (error instanceof ZodError) {
        const msg = fromError(error).toString();

        log.info(
          `[Middleware], [Validation], [ZOD ERROR], Route [${req.originalUrl}], ${msg}`
        );

        return res.status(400).json({
          msg,
          isSuccess: false,
        });
        // return res.status(400).json({
        //   msg: CONSTANTS.MSG.VALIDATION_ERROR,
        //   isSuccess: false,
        // });
      } else {
        res
          .status(500)
          .json({ msg: error?.message || error, isSuccess: false });
      }
    }
  };
}

export default validateData;
