importPackage(Packages.de.elo.ix.jscript);
importPackage(Packages.de.elo.ix.scripting);

//@include lib_Class.js
//@include lib_sol.common.Config.js
//@include lib_sol.common.SordUtils.js
//@include lib_sol.common.TranslateTerms.js
//@include lib_sol.common.ix.DynKwlSearchIterator.js
//@include lib_sol.contact.Utils.js

/**
 * Dynamic keyword list that returns the sord content of contacts selected by solution object type
 *
 * @author JHR, ELO Digital Office GmbH
 * @version 1.1
 *
 * @requires sol.common.Config
 * @requires sol.common.SordUtils
 * @requires sol.common.TranslateTerms
 * @requires sol.common.ix.DynKwlSearchIterator
 * @requires sol.contact.Utils
 */
sol.define("sol.contact.ix.dynkwl.FindContactIterator", {
  extend: "sol.common.ix.DynKwlSearchIterator",

  /**
   * @cfg
   * @inheritdoc
   */
  tableHeaders: null,

  /**
   * @cfg
   * @inheritdoc
   */
  tableTitle: null,

  /**
   * @cfg
   * @inheritdoc
   */
  tableKeyNames: null,

  /**
   * @cfg
   * Array of datafields used by the search results.
   */
  rowDataFields: null,

  /**
   * @cfg
   * @inheritdoc
   */
  searchParams: [
    { name: "CONTACT_LASTNAME", mode: "STARTS_WITH" },
    { name: "CONTACT_FIRSTNAME", mode: "STARTS_WITH" }
  ],

  initialize: function (config) {
    var me = this,
        i;

    me.contactConfig = sol.contact.Utils.loadConfig();
    me.tableTitle = me.contactConfig.dynkwl.contact.tableTitle;
    me.tableHeaders = me.contactConfig.dynkwl.contact.tableHeaders;
    me.tableKeyNames = me.contactConfig.dynkwl.contact.tableKeyNames;
    me.rowDataFields = me.contactConfig.dynkwl.contact.rowDataFields;
    me.solType = me.contactConfig.contact.solType;

    for (i = 0; i < me.tableHeaders.length; i++) {
      me.tableHeaders[i] = sol.common.TranslateTerms.translate(me.tableHeaders[i]);
    }
    me.tableTitle = sol.common.TranslateTerms.translate(me.tableTitle);

    me.$super("sol.common.ix.DynKwlSearchIterator", "initialize", [config]);
  },

  /**
   * Implements a find by type search that is filtered by name.
   * @param {Array} filterList
   * @return {de.elo.ix.client.FindInfo}
   */
  getFindInfo: function (filterList) {
    this.log.enter("getFindInfo");
    var me = this,
        findInfo, findByIndex, okeys, okey, i;

    findInfo = new FindInfo();
    findByIndex = new FindByIndex();
    okeys = [];

    okey = new ObjKey();
    okey.name = "SOL_TYPE";
    okey.data = [me.solType];
    okeys.push(okey);

    if (filterList && filterList.length > 0) {
      for (i = 0; i < filterList.length; i++) {
        if (me.searchParams[i].name && filterList[i] && (filterList[i] != "")) {
          okey = new ObjKey();
          okey.name = me.searchParams[i].name;
          okey.data = [filterList[i]];
          okeys.push(okey);
        }
      }
    }

    findByIndex.objKeys = okeys;
    findInfo.findByIndex = findByIndex;

    this.log.exit("getFindInfo");
    return findInfo;
  },

  /**
   * Basic implementation for search results.
   * This returns the content of the sord index fields.
   * @param {de.elo.ix.client.Sord} sord
   * @return {String}
   */
  getRowData: function (sord) {
    var me = this,
        data = [],
        i;

    for (i = 0; i < me.rowDataFields.length; i++) {
      data.push(sol.common.SordUtils.getObjKeyValue(sord, me.rowDataFields[i]));
    }

    return data;
  }
});

/**
 * Implements a DynamicKeywordDataProvider for this keyword list that can be used by checkoutKeywordsDynamic.
 * @static
 * @member sol.contact.ix.dynkwl.FindContactIterator
 * @returns {DynamicKeywordDataProvider}
 */
function getDataIterator() {
  var log = sol.create("sol.Logger", { scope: "sol.contact.ix.dynkwl.FindContactIterator" }),
      iterator;
  try {
    log.info("DynamicKeywordList (");
    iterator = sol.create("sol.contact.ix.dynkwl.FindContactIterator", {});
    return new DynamicKeywordDataProvider(iterator);
  } finally {
    log.info(")getDataIterator");
  }
}