import { NextFunction, Request, Response } from "express";
import { CatchAsyncError } from "../../middleware/Catch";
import { z } from "zod";
import ZodValidation from "../../utils/zodValidator";

export const cacheValidation = CatchAsyncError(async (req: Request, res: Response, next: NextFunction) => {

    const zodValidation = z.object({
        name: z
            .string({ message: "Please enter a valid name." })
            .trim()
            .min(4, { message: "Name must be at least 4 characters." })
            .max(50, { message: "Name must be at most 50 characters." })
            .regex(/^[a-zA-Z.-\s]+$/, {
                message: "Name must contain only letters and spaces.",
            }),
        token: z
            .string({ message: "Please enter a valid token." })
            .trim()
            .min(10, { message: "Token must be at least 10 characters." })
            .max(100, { message: "Token must be at most 100 characters." })
            .regex(/^[a-zA-Z0-9-_]+$/, {
                message: "Token must contain only alphanumeric characters, dashes, or underscores.",
            })
            .refine((val) => !val.includes(" "), {
                message: "Token should not contain spaces.",
            }),
        url: z.string({ required_error: "Please Enter A Valid URL" }).url({ message: "Please Enter A Valida URL" }).optional(),
    })


    await ZodValidation(req, res, next, zodValidation)

})