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

import java.util.Collection;
import java.util.function.Function;
import java.util.stream.Stream;

import javax.inject.Inject;

import org.apache.deltaspike.core.api.scope.ViewAccessScoped;

import de.ivu.elect.business.person.boundary.BerufExtendedDAO;
import de.ivu.elect.business.person.entity.Beruf;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.personenpruefung.control.wertelisten.PersonendatenWertelistenAbgleichFinder;
import de.ivu.elect.jee.presentation.dynamicform.AbstractAutoCompleteStringOptionsProvider;


import static java.util.Objects.isNull;
import static java.util.Objects.nonNull;

@ViewAccessScoped
public class PersonendatenBerufAutoCompleteOptionsProvider extends AbstractAutoCompleteStringOptionsProvider<Beruf> {

  private static final long serialVersionUID = 1L;

  @Inject
  private BerufExtendedDAO berufDao;

  @Inject
  private PersonendatenWertelistenAbgleichFinder personendatenWertelistenAbgleichFinder;

  private Personendaten personendaten;

  public PersonendatenBerufAutoCompleteOptionsProvider() {
    super();
  }

  public boolean isInitialized() {
    return nonNull(personendaten);
  }

  public void setPersonendaten(Personendaten personendaten) {
    if (isNull(personendaten) || !personendaten.equals(this.personendaten)) {
      resetOptions();
    }

    this.personendaten = personendaten;
  }

  public Collection<Beruf> getBerufe() {
    return getTemplates();
  }

  @Override
  protected Collection<Beruf> getTemplatesInternal() {
//    if (isInitialized()) {
//      return personendatenWertelistenAbgleichFinder.getBerufe(berufDao, personendaten);
//    }
//
//    throw new IllegalStateException("Suche nach Berufen ohne Personendaten nicht möglich");

    return personendatenWertelistenAbgleichFinder.getBerufe(berufDao);
  }

  @Override
  protected Function<Beruf, Stream<String>> templateToOptions() {
    return beruf -> Stream.of(beruf.getName());
  }
}
