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

import static de.ivu.elect.jee.entity.EntityUtil.castTo;
import static org.apache.commons.lang3.StringUtils.isNotBlank;

import javax.enterprise.inject.Specializes;

import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.gruppe.entity.GruppeProperties;
import de.ivu.elect.business.gruppe.entity.NlPolitischeGruppe;
import de.ivu.elect.business.gruppe.entity.PolitischeGruppe;
import de.ivu.elect.business.gruppe.entity.ReferendumVorlageConstants;
import de.ivu.elect.jee.presentation.dynamicform.AbstractStringProperty;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.dynamicform.PropertyType;
import de.ivu.elect.jee.presentation.dynamicform.ReadOnlyStringProperty;

@Specializes
public class NlGruppeViewFormBuilder extends GruppeViewFormBuilder {

  private static final long serialVersionUID = 1L;

  public NlGruppeViewFormBuilder() {
    super();
  }

  /**
   * NOTE: NL-ViewFormBuilder sind unabhängig vom Produkt. (ELECT-9733)
   */

  @Override
  public void addProperties(FormBuilder formBuilder, Gruppe gruppe, boolean propertiesAufGebietenReadonly, boolean globalReadonly) {
    GruppeProperties gruppeProperties = gruppe.getProperties();

    addNamenProperty(formBuilder, gruppe, gruppeProperties.getNameProperty(), gruppeProperties.getKurznameProperty(), gruppeProperties.getZusatzbezeichnungProperty(), globalReadonly);
  }

  @Override
  protected void addNamenProperty(FormBuilder formBuilder, Gruppe gruppe, AbstractStringProperty nameProperty, AbstractStringProperty kurznameProperty,
      AbstractStringProperty zusatzbezeichnungProperty, boolean readonly) {
    if (gruppe.isPolitischeGruppe()) {
      NlPolitischeGruppe nlPolitischeGruppe = new NlPolitischeGruppe(castTo(gruppe, PolitischeGruppe.class));

      boolean nameReadonly = readonly || nlPolitischeGruppe.isPersistent() && nlPolitischeGruppe.isBlancoListe(); // ELECT-10395

      formBuilder.addProperty(nameProperty).withReadonly(nameReadonly);

      if (gruppe.isReferendumVorlage()) {
        formBuilder.withLabel(getMessage(ReferendumVorlageConstants.MESSAGE_KEY_NAME_EINZAHL));
        formBuilder.withType(PropertyType.INPUT_TEXTAREA);
      }

      if (nlPolitischeGruppe.isNameGeaendert()) {
        String nameInitial = nlPolitischeGruppe.getNameInitial();

        if (isNotBlank(nameInitial)) {
          formBuilder.addProperty(new ReadOnlyStringProperty(getMessage("entity.einzahl.GRUPPE.NAME_INITIAL"), nameInitial));
        }
      }

      if (nlPolitischeGruppe.isNameAbgelehnt()) {
        String nameAbgelehnt = nlPolitischeGruppe.getNameInitial();
        String nameAbgelehntBemerkung = nlPolitischeGruppe.getNameAbgelehntBemerkung();

        if (isNotBlank(nameAbgelehnt)) {
          formBuilder.addProperty(new ReadOnlyStringProperty(getMessage("entity.einzahl.GRUPPE.NAME_ABGELEHNT"), nameAbgelehnt));
        }

        if (isNotBlank(nameAbgelehntBemerkung)) {
          formBuilder.addProperty(new ReadOnlyStringProperty(getMessage("entity.einzahl.GRUPPE.NAME_ABGELEHNT_BEMERKUNG"), nameAbgelehntBemerkung)).withType(PropertyType.INPUT_TEXTAREA);
        }
      }
    } else {
      formBuilder.addProperty(nameProperty).withReadonly(readonly);
    }
  }
}
