
package de.ivu.elect.presentation.personenpruefung;

import javax.inject.Inject;

import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.personenpruefung.control.wahlrecht.AbstractPersonendatenWahlrechtMatcher;
import de.ivu.elect.business.personenpruefung.control.wahlrecht.PersonendatenWahlrechtMatcherResolver;
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.jee.presentation.redirect.Redirect;
import de.ivu.elect.presentation.hilfe.OnlineHilfeId;
import de.ivu.elect.presentation.person.action.AbstractPersonendatenEditActionResolver;
import de.ivu.elect.presentation.personenpruefung.form.PersonenKonfliktWahlrechtlichePruefungAufloesenViewFormBuilder;

@OnlineHilfeId(value = "432", mehrfachVergebenOk = true)
public abstract class AbstractPersonenKonfliktWahlrechtlichePruefungAufloesenView extends AbstractPersonenKonfliktAufloesenView {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient PersonenKonfliktWahlrechtlichePruefungAufloesenViewFormBuilder viewFormBuilder;

  @Inject
  private transient PersonendatenWahlrechtMatcherResolver matcherResolver;

  private AdvancedDynaFormModel personendatenModel;

  private AdvancedDynaFormModel pruefSchrittErgebnisModel;

  protected AbstractPersonenKonfliktWahlrechtlichePruefungAufloesenView() {
    super();
  }

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

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

  public boolean isBtnEditPersonendatenRendered() {
    return getPersonendatenEditActionResolver().isActionPossible(getPersonendaten());
  }

  public abstract String getBtnEditPersonendatenLabel();

  @Redirect
  public String editPersonendaten() {
    return getPersonendatenEditActionResolver().doEdit(getPersonendaten());
  }

  protected abstract AbstractPersonendatenEditActionResolver getPersonendatenEditActionResolver();

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

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

    return personendatenModel;
  }

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

    addVerifiedPersonendatenProperties(formBuilder, personendaten);

    formBuilder.globalReadonly();

    return formBuilder.createModel();
  }

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

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

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

    return pruefSchrittErgebnisModel;
  }

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

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

    return formBuilder.createModel();
  }
}
