package io.delphi.qa.auto.awsmfrw.models.db.sql.dsl;

import org.apache.commons.lang3.ArrayUtils;

public abstract class AbstractDslSqlQuery implements InterfaceDslSqlQuery {

  protected String[] queryArray = new String[0];

  @Override
  public String queryText() {
    return String.join(" ", this.getQueryArray());
  }

  public String queryPgText() {
    return String.join(" ", this.getQueryArray()).replaceAll("([()])", "");
  }

  @Override
  public InterfaceDslSqlQuery close() {
    this.withQueryArray(ArrayUtils.addAll(getQueryArray(), ")"));
    return this;
  }

  public InterfaceDslSqlQuery limit(String limit) {
    this.withQueryArray(ArrayUtils.addAll(getQueryArray(), String.format("limit %s", limit)));
    return this;
  }

  // TODO by alexeyisakov @8/5/21#12:10 PM: Verify
  @Override
  public String[] getQueryArray() {
    return this.queryArray;
  }

  // TODO by alexeyisakov @8/5/21#12:10 PM: Verify
  @Override
  public InterfaceDslSqlQuery withQueryArray(String[] xQueryArray) {
    this.queryArray = xQueryArray;
    return this;
  }

  // TODO by alexeyisakov @8/5/21#12:10 PM: Verify
  @Override
  public InterfaceDslSqlQuery open() {
    return openDefaultImplementation();
  }
}
