
package de.ivu.elect.presentation.person.form;

import java.util.List;

import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.person.entity.PersonendatenConstants;
import de.ivu.elect.jee.faces.FacesMessageUtil;
import de.ivu.elect.jee.presentation.AjaxHelper;
import de.ivu.elect.jee.presentation.dynamicform.AbstractSelectManyStringAutoCompleteProperty;

public class PersonendatenBerufAutoCompleteProperty extends AbstractSelectManyStringAutoCompleteProperty {

  private static final String UNKNOW_OPTION_SUFFIX_LABEL_MSG_KEY = "PersonendatenWertelistenAutoCompleteProperty.suffix.fuer.nicht.vorgeschlagenen.wert";

  private final Personendaten personendaten;

  public PersonendatenBerufAutoCompleteProperty(Personendaten personendaten, PersonendatenBerufAutoCompleteOptionsProvider optionsProvider) {
    super(optionsProvider, UNKNOW_OPTION_SUFFIX_LABEL_MSG_KEY);

    this.personendaten = personendaten;

    optionsProvider.setPersonendaten(personendaten);
  }

  @Override
  public boolean getDefaultRequired() {
    return !PersonendatenConstants.BERUF_NULLABLE;
  }

  @Override
  protected String getDefaultLabelMsgKey() {
    return PersonendatenConstants.MESSAGE_KEY_BERUF_EINZAHL;
  }

  @Override
  public int getMaxQueryLength() {
    return PersonendatenConstants.BERUF_MAX_LENGTH;
  }

  @Override
  public int getMinQueryLength() {
    return 3;
  }

  @Override
  protected List<String> getValueInternal() {
    return personendaten.getBerufAsList();
  }

  @Override
  protected void setValueInternal(List<String> selection) {
    personendaten.setBerufFromList(selection);
  }

  @Override
  protected int getMaxOptionsReturnedCount() {
    // Bei 50000 Berufen dauert das Laden sonst zu lange
    // ELECTMUC-457: aber 1000 Berufe sind zu wenig, um bspw. alle "*techniker*" (derzeit ca. 2500 Einträge) anzuzeigen.
    return 3000;
  }

  @Override
  protected void handleMaxOptionsReturnedCountExceeded(int optionsFilteredCount) {
    FacesMessageUtil.addWarnMessage("personendaten.werteliste.beruf.zu.viele.eintraege.message", optionsFilteredCount, getOptions().size());

    new AjaxHelper().updateMessages();
  }
}
