
package de.ivu.elect.presentation.personenpruefung;

import static java.util.Objects.isNull;

import javax.inject.Inject;

import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.personenpruefung.control.mehrstaatigkeit.AbstractPersonendatenMehrstaatigkeitMatcher;
import de.ivu.elect.business.personenpruefung.control.mehrstaatigkeit.PersonendatenMehrstaatigkeitMatcherResolver;
import de.ivu.elect.business.personenpruefung.entity.PersonenKonfliktArt;
import de.ivu.elect.jee.presentation.dynamicform.AdvancedDynaFormModel;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.presentation.hilfe.OnlineHilfeId;
import de.ivu.elect.presentation.personenpruefung.form.PersonenKonfliktMehrstaatigkeitAufloesenViewFormBuilder;

@OnlineHilfeId("534")
public abstract class AbstractPersonenKonfliktMehrstaatigkeitAufloesenView extends AbstractPersonenKonfliktAufloesenView {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient PersonenKonfliktMehrstaatigkeitAufloesenViewFormBuilder viewFormBuilder;

  @Inject
  private transient PersonendatenMehrstaatigkeitMatcherResolver matcherResolver;

  private AdvancedDynaFormModel personendatenModel;

  private AdvancedDynaFormModel pruefSchrittErgebnisModel;

  public AbstractPersonenKonfliktMehrstaatigkeitAufloesenView() {
    super();
  }

  @Override
  public PersonenKonfliktArt getExpectedKonfliktArt() {
    return PersonenKonfliktArt.MEHRSTAATIGKEIT_PRUEFUNG_FEHLGESCHLAGEN;
  }

  protected AbstractPersonendatenMehrstaatigkeitMatcher getMatcher() {
    return matcherResolver.getMatcher(getPersonendaten());
  }

  @Override
  protected String getMarkPersonendatenInvalidMsgKey() {
    return "personen.konflikt.mehrstaatigkeit.aufloesen.action.personendaten.NICHT_GEEIGNET.konflikt.IST_ABLEHNUNGSGRUND";
  }

  @Override
  protected String getMarkPersonendatenValidMsgKey() {
    return "personen.konflikt.mehrstaatigkeit.aufloesen.action.personendaten.GEEIGNET.konflikt.IRRELEVANT";
  }

  public String getPersonendatenHeader() {
    return konfliktMeta.getPersonendatenEinzahlMessage();
  }

  public AdvancedDynaFormModel getPersonendatenModel() {
    if (isNull(personendatenModel)) {
      personendatenModel = createPersonendatenModel(getPersonendaten());
    }

    return personendatenModel;
  }

  private AdvancedDynaFormModel createPersonendatenModel(Personendaten personendaten) {
    FormBuilder formBuilder = new FormBuilder();

    addVerifiedPersonendatenProperties(formBuilder, personendaten);

    return formBuilder.createModel();
  }

  protected void addVerifiedPersonendatenProperties(FormBuilder formBuilder, Personendaten personendaten) {
    viewFormBuilder.addVerifiedPersonendatenProperties(getMatcher(), formBuilder, personendaten);
  }

  public String getPruefSchrittErgebnisHeader() {
    return getMessage("personen.konflikt.mehrstaatigkeit.pruefung.ergebnis");
  }

  public AdvancedDynaFormModel getPruefSchrittErgebnisModel() {
    if (isNull(pruefSchrittErgebnisModel)) {
      pruefSchrittErgebnisModel = createPruefSchrittErgebnisModel(getMatcher(), getPersonendaten());
    }

    return pruefSchrittErgebnisModel;
  }

  private AdvancedDynaFormModel createPruefSchrittErgebnisModel(AbstractPersonendatenMehrstaatigkeitMatcher matcher, Personendaten personendaten) {
    FormBuilder formBuilder = new FormBuilder();

    viewFormBuilder.addPruefSchrittErgebnisProperties(getMatcher(), formBuilder, personendaten);

    return formBuilder.createModel();
  }
}
