
package de.ivu.elect.presentation.email.table;

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

import javax.inject.Inject;
import javax.inject.Named;

import de.ivu.elect.business.email.boundary.EmailExtendedDAO;
import de.ivu.elect.business.email.entity.EmailVorgang;
import de.ivu.elect.jee.presentation.dynamictable.AbstractColumnBuilder;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;
import de.ivu.elect.presentation.email.EmailLayoutUiVisibility;

@Named(EmailVorgangColumnBuilder.COMPONENT_NAME)
public class EmailVorgangColumnBuilder extends AbstractColumnBuilder<EmailVorgang> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "emailVorgangColumnBuilder";

  @Inject
  private transient EmailExtendedDAO emailExtendedDAO;

  @Inject
  private transient EmailLayoutUiVisibility emailLayoutUiVisibility;

  private AbstractEmailVorgangColumn<EmailVorgang> emailVorgangStatusColumn;

  private AbstractEmailVorgangColumn<EmailVorgang> emailVorgangBetreffColumn;

  private AbstractEmailVorgangColumn<EmailVorgang> emailVorgangAnzahlEmailsZuVersendenColumn;

  private AbstractEmailVorgangColumn<EmailVorgang> emailVorgangAnzahlEmailsVersendetColumn;

  private AbstractEmailVorgangColumn<EmailVorgang> emailVorgangAnzahlEmailsFehlerhaftColumn;

  private AbstractEmailVorgangColumn<EmailVorgang> emailVorgangTypColumn;

  private AbstractEmailVorgangColumn<EmailVorgang> emailVorgangEmailVorlageBezeichnungColumn;

  private AbstractEmailVorgangColumn<EmailVorgang> emailVorgangEmailLayoutBezeichnungColumn;

  private AbstractEmailVorgangColumn<EmailVorgang> emailVorgangBenutzerkennungColumn;

  private AbstractEmailVorgangColumn<EmailVorgang> emailVorgangErstellungszeitpunktColumn;

  private Boolean emailLayoutsVisible = null;

  public EmailVorgangColumnBuilder() {
    super();
  }

  @Override
  protected void initColumns() {
    emailVorgangStatusColumn = new EmailVorgangStatusColumn<>(getMessages(), getIcons());

    emailVorgangBetreffColumn = AbstractEmailVorgangColumn.createEmailVorgangBetreffColumn(getMessages());

    emailVorgangAnzahlEmailsZuVersendenColumn = new EmailVorgangAnzahlEmailsZuVersendenColumn<>(getMessages(), emailExtendedDAO);
    emailVorgangAnzahlEmailsVersendetColumn = new EmailVorgangAnzahlEmailsVersendetColumn<>(getMessages(), emailExtendedDAO);
    emailVorgangAnzahlEmailsFehlerhaftColumn = new EmailVorgangAnzahlEmailsFehlerhaftColumn<>(getMessages(), emailExtendedDAO);

    emailVorgangTypColumn = new EmailVorgangTypColumn<>(getMessages());

    emailVorgangEmailVorlageBezeichnungColumn = new EmailVorgangEmailVorlageBezeichnungColumn<>(getMessages());

    if (isEmailLayoutsVisible()) {
      emailVorgangEmailLayoutBezeichnungColumn = new EmailVorgangEmailLayoutBezeichnungColumn<>(getMessages());
    }

    emailVorgangBenutzerkennungColumn = new EmailVorgangBenutzerkennungColumn<>(getMessages());

    emailVorgangErstellungszeitpunktColumn = new EmailVorgangErstellungszeitpunktColumn<>(getMessages());
  }

  @Override
  protected List<ColumnEntry< ? super EmailVorgang>> getColumnEntriesSorted() {
    List<ColumnEntry< ? super EmailVorgang>> result = new ArrayList<>();

    result.add(emailVorgangStatusColumn);

    result.add(emailVorgangBetreffColumn);

    result.add(emailVorgangAnzahlEmailsZuVersendenColumn);
    result.add(emailVorgangAnzahlEmailsVersendetColumn);
    result.add(emailVorgangAnzahlEmailsFehlerhaftColumn);

    result.add(emailVorgangTypColumn);

    result.add(emailVorgangEmailVorlageBezeichnungColumn);

    if (isEmailLayoutsVisible()) {
      result.add(emailVorgangEmailLayoutBezeichnungColumn);
    }

    result.add(emailVorgangBenutzerkennungColumn);

    result.add(emailVorgangErstellungszeitpunktColumn);

    return result;
  }

  private boolean isEmailLayoutsVisible() {
    if (emailLayoutsVisible == null) {
      emailLayoutsVisible = emailLayoutUiVisibility.isEmailLayoutAuswahlVisible();
    }

    return emailLayoutsVisible;
  }
}
