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

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.niederschrift.boundary.NiederschriftFormatter;
import de.ivu.elect.business.niederschrift.entity.Niederschrift;
import de.ivu.elect.business.niederschrift.entity.NiederschriftKorrektur;
import de.ivu.elect.business.niederschrift.entity.NiederschriftKorrekturProperties;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.dynamicform.PropertyType;
import de.ivu.elect.presentation.ViewFormBuilder;

public class NiederschriftKorrekturViewFormBuilder extends ViewFormBuilder {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient NiederschriftFormatter niederschriftFormatter;

  public NiederschriftKorrekturViewFormBuilder() {
    super();
  }

  public void addProperties(FormBuilder formBuilder, NiederschriftKorrektur niederschriftKorrektur, List<Niederschrift> niederschriftenKorrigierbar, boolean readonly) {
    NiederschriftKorrekturProperties niederschriftKorrekturProperties = niederschriftKorrektur.getProperties();

    formBuilder.addProperty(niederschriftKorrekturProperties.getErfasserProperty()).readonly();
    formBuilder.addProperty(createNiederschriftProperty(niederschriftKorrektur, niederschriftenKorrigierbar)).withReadonly(readonly || niederschriftKorrektur.isPersistent());
    formBuilder.addProperty(niederschriftKorrekturProperties.getNiederschriftKorrekturArtProperty()).withReadonly(readonly || niederschriftKorrektur.isPersistent());
    formBuilder.addProperty(niederschriftKorrekturProperties.getBeschreibungProperty()).withType(PropertyType.INPUT_TEXTAREA).withReadonly(readonly);
  }

  private NiederschriftKorrekturNiederschriftProperty createNiederschriftProperty(NiederschriftKorrektur niederschriftKorrektur, List<Niederschrift> niederschriftenKorrigierbar) {
    List<Niederschrift> values = new ArrayList<>(niederschriftenKorrigierbar);

    if (niederschriftKorrektur.isPersistent()) {
      values.clear();
      values.add(niederschriftKorrektur.getNiederschrift());
    }

    return new NiederschriftKorrekturNiederschriftProperty(getMessages(), niederschriftFormatter, niederschriftKorrektur, values);
  }
}
