import { FieldCheck } from "./fieldChecks";

export class FieldsContainer {
    fields = new Map<string, Field>();

    /**
     * Add field to container.
     * @param {string} name - The field name.
     * @param {string} value - The field value.
     * @param {Array} checks - Array of necessary FieldCheck objects.
     */
    addField(name: string, value: string, checks: FieldCheck[]) {
        this.fields.set(name, new Field(value, checks));
    }
}

export class Field {
    value: string;
    checks: FieldCheck[];

    constructor(value: string, checks: FieldCheck[]) {
        this.value = value;
        this.checks = checks;
    }

    tryGetFirstError() {
        let result = "";

        this.checks.every((fieldCheck) => {
            result = fieldCheck.check(this.value);
            return result === ""; //break or continue every()
        });

        return result;
    }

    tryGetAllErrors() {
        const result = this.checks.flatMap((fieldCheck) => {
            const err = fieldCheck.check(this.value);
            return err === "" ? [] : [err];
        });

        return result.join(", ");
    }
}
