import React, {useState} from 'react';

export default function ValidatingInputNumberField({
                                                       id,
                                                       label,
                                                       value = 0,
                                                       constraints = {},
                                                       validatorFn = (value) => {
                                                           return {valid: true, value};
                                                       },
                                                       disabled = false,
                                                       onChange = _ => {
                                                       }
                                                   }) {
    const [error, setError] = useState(null);

    const handleValueChange = (e) => {
        const value = e.target.value;
        const validation = validatorFn(value);
        if (!validation.valid) {
            setError(validation.message);
        } else {
            setError(null);
        }
        onChange(validation.value);
    };
    return (
        <>
            <label htmlFor={id}>{label}: </label>
            <input id={id}
                   type={"number"}
                   onChange={handleValueChange}
                   value={value || ""}
                   min={constraints.min || null}
                   max={constraints.max || null}
                   disabled={disabled}
            />
            {!!error && <span>{error}</span>}
        </>
    );
}
