
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.Personendaten;
import de.ivu.elect.business.personenpruefung.control.wertelisten.PersonendatenWertelistenAbgleichMatcher;
import de.ivu.elect.business.personenpruefung.control.wertelisten.PersonendatenWertelistenAbgleichMatcherResolver;
import de.ivu.elect.business.wertelisten.entity.Wertelisten;
import de.ivu.elect.business.wertelisten.entity.WertelistenArt;

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

  public static final String COMPONENT_NAME = "personenKonfliktWertenlistenAbgleichWertelisteneintragConversationSelect";

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

  @Inject
  protected PersonenKonfliktConversationSelect personenKonfliktConversationSelect;

  @Inject
  protected PersonendatenWertelistenAbgleichMatcherResolver matcherResolver;

  public PersonenKonfliktWertenlistenAbgleichWertelisteneintragConversationSelect() {
    super();
  }

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

  public void selectWertelisteneintrag(Collection<Wertelisten> wertelisten, WertelistenArt wertelistenArt) {
    if (!personenKonfliktConversationSelect.isSelected()) {
      return;
    }

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

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

    if (wertelistenArt.equals(WertelistenArt.AKADEMISCHER_GRAD)) {
      for (String name : personendaten.getAkademischerGradAsList()) {
        if (!matcher.matchesAkademischerGrad(wertelisten, name)) {
          Wertelisten wertelisteneintrag = new Wertelisten();
          wertelisteneintrag.setName(name);
          wertelisteneintrag.setWertelistenArt(WertelistenArt.AKADEMISCHER_GRAD);
          conversationStore.setWertelisteneintrageintrag(wertelisteneintrag);
          break;
        }
      }
    } else {
      for (String name : personendaten.getEhrenamtAsList()) {
        if (!matcher.matchesEhrenamt(wertelisten, name)) {
          Wertelisten wertelisteneintrag = new Wertelisten();
          wertelisteneintrag.setName(name);
          wertelisteneintrag.setWertelistenArt(WertelistenArt.EHRENAMT);
          conversationStore.setWertelisteneintrageintrag(wertelisteneintrag);
          break;
        }
      }
    }
  }

  public Wertelisten getWertelisteneintrag() {
    return conversationStore.getWertelisteneintrageintrag();
  }

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