import { ZodTypeAny } from "zod";
import { Request, Response, NextFunction } from "express";
import { formatZodError } from "../utils/zod-error-formatter";

export const validate =
  (schema: ZodTypeAny) =>
  (req: Request, _res: Response, next: NextFunction) => {
    const result = schema.safeParse({
      body: req.body,
      query: req.query,
      params: req.params,
    });

    if (!result.success) {
      return next({
        statusCode: 400,
        message: "Validation failed",
        errorCode: "VALIDATION_ERROR",
        details: formatZodError(result.error),
      });
    }

    req.body = (result.data as any)?.body ?? req.body;
    next();
  };
