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

import java.util.List;

import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.person.entity.AbstractPersonendaten;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.jee.presentation.dynamicform.AbstractSelectManyStringAutoCompleteProperty;

public class PersonendatenPersonendatenTagAutoCompleteProperty extends AbstractSelectManyStringAutoCompleteProperty {

  private final boolean personendatenTagAutoCompleteOptionsSupported;

  private final Personendaten personendaten;

  private final PersonendatenPersonendatenTagAutoCompleteOptionsProvider optionsProvider;

  private final boolean negationErlaubt;

  public PersonendatenPersonendatenTagAutoCompleteProperty(Personendaten personendaten,
                                                           PersonendatenPersonendatenTagAutoCompleteOptionsProvider optionsProvider, boolean negationErlaubt) {
    super(optionsProvider);
    this.personendatenTagAutoCompleteOptionsSupported = optionsProvider.isPersonendatenTagAutoCompleteOptionsSupported();
    this.personendaten = personendaten;
    this.optionsProvider = optionsProvider;
    this.negationErlaubt = negationErlaubt;
    init();
  }

  public void init() {
    optionsProvider.setNegationErlaubt(negationErlaubt);
  }


  @Override
  public boolean getDefaultRequired() {
    return false;
  }

  @Override
  protected String getDefaultLabelMsgKey() {
    return AbstractPersonendaten.MESSAGE_KEY_PERSONENDATEN_TAG_EINZAHL;
  }

  @Override
  public int getMaxQueryLength() {
    return 225;
  }

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

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

  @Override
  protected void setValueInternal(List<String> values) {
    personendaten.removeAllPersonendatenTags();

    values.stream().distinct().forEach(personendaten::addPersonendatenTag);
  }

  @Override
  public String getPlaceholder() {
    if (hasOptions() || personendatenTagAutoCompleteOptionsSupported) {
      return super.getPlaceholder();
    }

    return ""; // ELECT-10536, KEINE Werte auswählbar -> KEIN Hinweis auf Nicht-Vorhandensein...
  }
}
