
package de.ivu.elect.business.personenpruefung.boundary;

import java.util.Collection;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;

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

import de.ivu.elect.business.person.entity.Beruf;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.personenpruefung.control.wertelisten.PersonendatenWertelistenAbgleichMatcher;
import de.ivu.elect.business.personenpruefung.control.wertelisten.PersonendatenWertelistenAbgleichMatcherResolver;

@RequestScoped
@Named(PersonenKonfliktWertenlistenAbgleichBerufConversationSelect.COMPONENT_NAME)
public class PersonenKonfliktWertenlistenAbgleichBerufConversationSelect {

  public static final String COMPONENT_NAME = "personenKonfliktWertenlistenAbgleichBerufConversationSelect";

  @Inject
  @ConversationGroup(PersonenKonfliktWertenlistenAbgleichBerufConversationStore.class)
  protected PersonenKonfliktWertenlistenAbgleichBerufConversationStore conversationStore;

  @Inject
  protected PersonenKonfliktConversationSelect personenKonfliktConversationSelect;

  @Inject
  protected PersonendatenWertelistenAbgleichMatcherResolver matcherResolver;

  public boolean isSelected() {
    return personenKonfliktConversationSelect.isSelected() && getBeruf() != null;
  }

  public void selectBeruf(Collection<Beruf> berufe) {
    if (!personenKonfliktConversationSelect.isSelected()) {
      return;
    }

    Personendaten personendaten = personenKonfliktConversationSelect.getEntity().getPersonendaten();

    PersonendatenWertelistenAbgleichMatcher matcher = matcherResolver.getMatcher(personenKonfliktConversationSelect
        .getEntity().getPersonendaten());

    for (String name : personendaten.getBerufAsList()) {
      if (!matcher.matchesBeruf(berufe, name)) {
        Beruf beruf = new Beruf();
        beruf.setName(name);
        conversationStore.setBeruf(beruf);
        break;
      }
    }
  }

  public Beruf getBeruf() {
    return conversationStore.getBeruf();
  }

  public void clearEntity() {
    conversationStore.close();
    personenKonfliktConversationSelect.clearEntity();
  }
}
