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

export function EqualValidator(controlName: string, matchingControlName: string): ValidatorFn | null
{
  return (formGroup: AbstractControl): { [key: string]: any } | null =>
  {
    const control = formGroup.get(controlName);
    const matchingControl = formGroup.get(matchingControlName);

    if (!control || !matchingControl)
    {
      return;
    }

    if (matchingControl.errors && !matchingControl.errors.confirmedValidator)
    {
      return;
    }

    if (control.value !== matchingControl.value)
    {
      matchingControl.setErrors({ equalValidator: true });
    }
    else
    {
      matchingControl.setErrors(null);
    }
  }
}

export function UnequalValidator(controlName: string, matchingControlName: string): ValidatorFn | null
{
  return (formGroup: AbstractControl): { [key: string]: any } | null =>
  {
    const control = formGroup.get(controlName);
    const matchingControl = formGroup.get(matchingControlName);

    if (!control || !matchingControl)
    {
      return;
    }

    if (matchingControl.errors && !matchingControl.errors.confirmedValidator)
    {
      return;
    }

    if (control.value === matchingControl.value)
    {
      matchingControl.setErrors({ unequalValidator: true });
    }
    else
    {
      matchingControl.setErrors(null);
    }
  }
}
