package org.molgenis.web.rsql;

import cz.jirutka.rsql.parser.RSQLParser;
import cz.jirutka.rsql.parser.ast.ComparisonOperator;
import cz.jirutka.rsql.parser.ast.RSQLOperators;
import java.util.Set;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class RsqlConfig implements WebMvcConfigurer {
  @Override
  public void addFormatters(FormatterRegistry registry) {
    registry.addConverter(rsqlQueryConverter());
  }

  @Bean
  public QueryRsqlConverter rsqlQueryConverter() {
    return new QueryRsqlConverter(rsqlParser());
  }

  @Bean
  public RSQLParser rsqlParser() {
    Set<ComparisonOperator> operators = RSQLOperators.defaultOperators();
    operators.add(new ComparisonOperator("=q=", false));
    operators.add(new ComparisonOperator("=sq=", false));
    operators.add(new ComparisonOperator("=notlike=", false));
    operators.add(new ComparisonOperator("=rng=", true));
    operators.add(new ComparisonOperator("=like=", false));
    return new RSQLParser(operators);
  }
}