import { Request } from "express";
import { ValidationRule } from "../../types/controller";
import {FormError, fieldError} from "../../types/custom"
import logger from "../../libs/logger";

// eslint-disable-next-line @typescript-eslint/no-explicit-any
const validate = (req: Request, validators: ValidationRule<any>[]): boolean => {
    if (validators.length === 0) return true;

    const bodyValues = Object.entries(req.body);
    req.session.formErrors = [] as FormError[];
    req.session.error = {} as fieldError
    const errorObject = req.session?.error as fieldError;

    const validationResult = validators.map((item) => {
        const {fieldNames, validate, message} = item;
        return fieldNames.map((fieldName) => {
            return bodyValues.map((bodyValue) => {
                if (fieldName === bodyValue[0]) {
                    const isValid = validate(bodyValue[1])
                    if(!isValid){
                        logger.debug(`${fieldName} ${bodyValue[1]} is not valid`)
                        req.session.formErrors?.push({errorMessage: message, field: fieldName} as FormError)
                        errorObject[fieldName] = { text : `${message}`}
                    }
                    return isValid
                }
                return true;
            }).flat();
        }).flat();
    });

    return !validationResult.flat().some((i) => i == false);
}

export default validate;


