
package de.ivu.elect.presentation;

import java.text.NumberFormat;

import javax.annotation.Nonnull;
import javax.enterprise.event.Observes;
import javax.enterprise.event.Reception;

import org.primefaces.model.chart.PieChartModel;

import de.ivu.elect.business.gebietsbaum.boundary.GebietSelectChangeEvent;
import de.ivu.elect.jee.entity.Entity;
import de.ivu.elect.jee.faces.FacesContextUtil;
import de.ivu.elect.jee.presentation.charts.PieChartModelBuilder;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.redirect.Redirect;

// ELECT-3505 - Wahl(art)- und gebietsabhängiges Rechtekonzept umsetzen
public abstract class AbstractElectStatusuebersichtView<T extends Entity< ? , ? >> extends AbstractElectEditView<T> {

  private static final long serialVersionUID = 1L;

  private PieChartModel statusPieChartModel;

  public AbstractElectStatusuebersichtView() {
    super();
  }

  public PieChartModel getStatusPieChartModel() {
    if (statusPieChartModel == null) {
      PieChartModelBuilder modelBuilder = createPieChartModelBuilder();

      fillStatusPieChartModel(modelBuilder);

      statusPieChartModel = modelBuilder.buildModel();
    }

    return statusPieChartModel;
  }

  protected abstract void fillStatusPieChartModel(PieChartModelBuilder modelBuilder);

  @Nonnull
  protected PieChartModelBuilder createPieChartModelBuilder() {
    return PieChartModelBuilder.getDefaultInstance();
  }

  @Override
  protected void warnNoEntitySet() {
    // nichts zu tun
  }

  public void onGebietSelectChangeEvent(@Observes(notifyObserver = Reception.IF_EXISTS) GebietSelectChangeEvent event) {
    reset();
  }

  protected String format(Number anzahl) {
    return NumberFormat.getIntegerInstance(getUserLocale().getLocale()).format(anzahl);
  }

  protected String format(Long anzahl) {
    return NumberFormat.getIntegerInstance(getUserLocale().getLocale()).format(anzahl);
  }

  public String getGebietName() {
    return getSelectedGebietNameFormatted();
  }

  @Override
  protected void resetModel() {
    super.resetModel();

    statusPieChartModel = null;
  }

  /**
   * Erstmal nicht nutzen...
   *
   * NOTE ELECTMUC-1725, solange null als Entity geliefert wird, wird kein DynaForm-Model erzeugt, cf. AbstractElectEditView#getModel!!!
   */

  @Override
  protected T getEntity() {
    return null;
  }

  @Override
  public String delete() {
    return null;
  }

  @Override
  protected boolean isGebietBearbeitenRechtPruefen() {
    return false;
  }

  @Override
  protected boolean isSavePermissionVorhanden() {
    return getModel() != null;
  }

  @Override
  @Redirect
  public String save() {
    resetModel();
    return FacesContextUtil.getCurrentViewId();
  }

  @Override
  public String getBtnSaveLabel() {
    return getMessage("entity.search.action.apply");
  }

  @Override
  public boolean isBtnCancelRendered() {
    return false;
  }

  @Override
  public String cancel() {
    return null;
  }

  @Override
  protected void addProperties(FormBuilder formBuilder, T entity) {
    // nichts zu tun
  }
}
