import { FormGroup, ValidationErrors, ValidatorFn } from '@angular/forms';

/**
 * Constant to validate a `duration` field.
 *
 * `([0-9]+)` looks for a number with any length to the `:` (optional).\n
 *
 * `([0-5][0-9]?)?`: The user can optionally enter a number for minutes/seconds (0 - 59)
 *
 * Afterwards the duration can be specified as hours or minutes (via `[h|m]?` - optional). Defaults to `h`.
 *
 * @param control The form-control to validate
 *
 * @returns {ValidationErrors | null} Null, if the input is correct, `ValidationErrors` otherwise.
 */
export const durationValidator: ValidatorFn = (control: FormGroup): ValidationErrors | null => {
    const regExp = /^\s*([0-9]+)(:)?([0-5][0-9]?)?\s*[h|m]?$/g;
    return regExp.test(control.value) || control.value === '' ? null : { valid: false };
};
