import { Directive } from '@angular/core';
import {AbstractControl, NG_VALIDATORS} from '@angular/forms';
import { Parser, Rule, Grammar, CompiledRules, Lexer } from 'nearley';
import grammar from '../services/workflow-service/operation-condition-grammar-parser';

@Directive({
  selector: '[appOpIfConditionValidator]',
  providers: [
    {
      provide: NG_VALIDATORS,
      useExisting: OpIfConditionValidatorDirective, multi: true
    }]
})
export class OpIfConditionValidatorDirective {

  constructor() {
  }

  validate(control: AbstractControl): {[key: string]: any} {
    const parser: Parser = new Parser(
      Grammar.fromCompiled(grammar),
      { keepHistory: true }
    );
    try {
      parser.feed(control.value);
      return null;
    } catch (err) {
      return {invalidIfCond: {notvalid: true, msg: err.message.split("Instead")[0]}};
    }
  }

}

export const APPLICATION_VALIDATORS = [OpIfConditionValidatorDirective];