import { ZodSchema } from 'zod';
import { Request, Response, NextFunction } from 'express';

export const validate = (schema: ZodSchema) =>
  (req: Request, res: Response, next: NextFunction): void => {
    const result = schema.safeParse(req.body);
    if (!result.success) {
      res.status(400).json({
        error: 'validation_error',
        message: 'Invalid request body',
        details: result.error.flatten(),
      });
      return;
    }
    req.body = result.data;
    next();
  };

export const validateQuery = (schema: ZodSchema) =>
  (req: Request, res: Response, next: NextFunction): void => {
    const result = schema.safeParse(req.query);
    if (!result.success) {
      res.status(400).json({
        error: 'validation_error',
        message: 'Invalid query parameters',
        details: result.error.flatten(),
      });
      return;
    }
    req.query = result.data as typeof req.query;
    next();
  };

export const validateParams = (schema: ZodSchema) =>
  (req: Request, res: Response, next: NextFunction): void => {
    const result = schema.safeParse(req.params);
    if (!result.success) {
      res.status(400).json({
        error: 'validation_error',
        message: 'Invalid path parameters',
        details: result.error.flatten(),
      });
      return;
    }
    req.params = result.data as typeof req.params;
    next();
  };
