
package de.ivu.elect.business.datei.entity;

import org.apache.commons.lang3.StringUtils;

import de.ivu.elect.business.exchange.entity.ImportUpdateReport;
import de.ivu.elect.jee.entity.customdata.DefaultCustomData;
import de.ivu.elect.jee.exchange.ImportOptions;
import de.ivu.elect.jee.exchange.ViolationLevel;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.protokollierung.AttributTyp;

public class DateiImportBerichtCustomData extends DefaultCustomData {

  private static final long serialVersionUID = 1L;

  public static final String DATEI_IMPORT_BERICHT_LINE_SEPARATOR = System.lineSeparator();

  private long nurInDatei;

  private long nurInDatenbank;

  private long inDateiUndInDatenbank;

  private long inDatenbankNachher;

  private boolean optionAktualisiereBestehende;

  private boolean optionUebernehmenNeue;

  private boolean optionLoescheFehlende;

  private boolean importWarnungenVorhanden;

  private String bericht;

  public DateiImportBerichtCustomData() {
    super();
  }

  public long getInDateiUndInDatenbank() {
    return inDateiUndInDatenbank;
  }

  public void setInDateiUndInDatenbank(long inDateiUndInDatenbank) {
    notifyEntity(DateiImportBerichtCustomDataConstants.MESSAGE_KEY_IN_DATEI_UND_IN_DATENBANK_EINZAHL, AttributTyp.LONG, this.inDateiUndInDatenbank, this.inDateiUndInDatenbank = inDateiUndInDatenbank);
  }

  public long getNurInDatei() {
    return nurInDatei;
  }

  public void setNurInDatei(long nurInDatei) {
    notifyEntity(DateiImportBerichtCustomDataConstants.MESSAGE_KEY_NUR_IN_DATEI_EINZAHL, AttributTyp.LONG, this.nurInDatei, this.nurInDatei = nurInDatei);
  }

  public long getNurInDatenbank() {
    return nurInDatenbank;
  }

  public void setNurInDatenbank(long nurInDatenbank) {
    notifyEntity(DateiImportBerichtCustomDataConstants.MESSAGE_KEY_NUR_IN_DATENBANK_EINZAHL, AttributTyp.LONG, this.nurInDatenbank, this.nurInDatenbank = nurInDatenbank);
  }

  public long getInDatenbankNachher() {
    return inDatenbankNachher;
  }

  public void setInDatenbankNachher(long inDatenbankNachher) {
    notifyEntity(DateiImportBerichtCustomDataConstants.MESSAGE_KEY_IN_DATENBANK_NACHHER, AttributTyp.LONG, this.inDatenbankNachher, this.inDatenbankNachher = inDatenbankNachher);
  }

  public boolean isOptionAktualisiereBestehende() {
    return optionAktualisiereBestehende;
  }

  public void setOptionAktualisiereBestehende(boolean optionAktualisiereBestehende) {
    notifyEntity(DateiImportBerichtCustomDataConstants.MESSAGE_KEY_OPTION_AKTUALISIERE_BESTHENDE_EINZAHL, AttributTyp.BOOLEAN, this.optionAktualisiereBestehende,
        this.optionAktualisiereBestehende = optionAktualisiereBestehende);
  }

  public boolean isOptionUebernehmenNeue() {
    return optionUebernehmenNeue;
  }

  public void setOptionUebernehmenNeue(boolean optionUebernehmenNeue) {
    notifyEntity(DateiImportBerichtCustomDataConstants.MESSAGE_KEY_OPTION_UEBERNEHME_NEUE_EINZAHL, AttributTyp.BOOLEAN, this.optionUebernehmenNeue, this.optionUebernehmenNeue = optionUebernehmenNeue);
  }

  public boolean isOptionLoescheFehlende() {
    return optionLoescheFehlende;
  }

  public void setOptionLoescheFehlende(boolean optionLoescheFehlende) {
    notifyEntity(DateiImportBerichtCustomDataConstants.MESSAGE_KEY_OPTION_LOESCHE_FEHLENDE_EINZAHL, AttributTyp.BOOLEAN, this.optionLoescheFehlende,
        this.optionLoescheFehlende = optionLoescheFehlende);
  }

  public String getBericht() {
    return bericht;
  }

  public void setBericht(String bericht) {
    notifyEntity(DateiImportBerichtCustomDataConstants.MESSAGE_KEY_BERICHT_EINZAHL, AttributTyp.STRING, this.bericht, this.bericht = bericht);
  }

  public boolean areWarnungenVorhanden() {
    return importWarnungenVorhanden;
  }

  public void setWarnungenVorhanden(boolean warnungenVorhanden) {
    this.importWarnungenVorhanden = warnungenVorhanden;
  }

  public void setImportUpdateReport(ImportUpdateReport importUpdateReport) {
    setNurInDatei(importUpdateReport.getNurInDatei());
    setNurInDatenbank(importUpdateReport.getNurInDatenbank());
    setInDateiUndInDatenbank(importUpdateReport.getInDateiUndInDatenbank());

    ImportOptions importOptions = importUpdateReport.getImportOptions();
    setOptionAktualisiereBestehende(importOptions.isAktualisiereBestehendenDaten());
    setOptionUebernehmenNeue(importOptions.isImportDatenUebernehmenWennNichtBereitsVorhanden());
    setOptionLoescheFehlende(importOptions.isLoescheBestehendenDatenWennNichtInImportDatenVorhanden());
    setInDatenbankNachher(importUpdateReport.getInDatenbankNachher());
    setWarnungenVorhanden(importUpdateReport.getViolations().containsViolationsWithLevel(ViolationLevel.WARNING));
  }

  @Override
  public String toString() {
    final StringBuilder sb = new StringBuilder("DateiImportBerichtCustomData{");
    sb.append("nurInDatei=").append(nurInDatei);
    sb.append(", nurInDatenbank=").append(nurInDatenbank);
    sb.append(", inDateiUndInDatenbank=").append(inDateiUndInDatenbank);
    sb.append(", inDatenbankNachher=").append(inDatenbankNachher);
    sb.append(", optionAktualisiereBestehende=").append(optionAktualisiereBestehende);
    sb.append(", optionUebernehmenNeue=").append(optionUebernehmenNeue);
    sb.append(", optionLoescheFehlende=").append(optionLoescheFehlende);
    sb.append(", bericht='").append(bericht).append('\'');
    sb.append('}');
    return sb.toString();
  }

  public String toString(Messages messages) {
    StringBuilder sb = new StringBuilder();

    if (StringUtils.isNotBlank(bericht)) {
      sb.append(bericht);

      if (!bericht.endsWith(DATEI_IMPORT_BERICHT_LINE_SEPARATOR)) {
        sb.append(DATEI_IMPORT_BERICHT_LINE_SEPARATOR);
      }
    }

    sb.append(DATEI_IMPORT_BERICHT_LINE_SEPARATOR);
    sb.append(messages.getMessageForMessageKey("import.bericht.log.header"));

    sb.append(DATEI_IMPORT_BERICHT_LINE_SEPARATOR);
    sb.append(messages.getMessageForMessageKey("import.bericht.log.nurInDatei", nurInDatei)).append(DATEI_IMPORT_BERICHT_LINE_SEPARATOR);
    sb.append(messages.getMessageForMessageKey("import.bericht.log.nurInDatenbank", nurInDatenbank)).append(DATEI_IMPORT_BERICHT_LINE_SEPARATOR);
    sb.append(messages.getMessageForMessageKey("import.bericht.log.inDateiUndInDatenbank", inDateiUndInDatenbank)).append(DATEI_IMPORT_BERICHT_LINE_SEPARATOR);
    sb.append(messages.getMessageForMessageKey("import.bericht.log.inDatenbankNachher", inDatenbankNachher)).append(DATEI_IMPORT_BERICHT_LINE_SEPARATOR);

    sb.append(DATEI_IMPORT_BERICHT_LINE_SEPARATOR);
    sb.append(messages.getMessageForMessageKey("import.bericht.log.option"));

    sb.append(DATEI_IMPORT_BERICHT_LINE_SEPARATOR);
    sb.append(messages.getMessageForMessageKey("import.bericht.log.optionAktualisiereBestehende", messages.lokalisiere(optionAktualisiereBestehende))).append(DATEI_IMPORT_BERICHT_LINE_SEPARATOR);
    sb.append(messages.getMessageForMessageKey("import.bericht.log.optionUebernehmenNeue", messages.lokalisiere(optionUebernehmenNeue))).append(DATEI_IMPORT_BERICHT_LINE_SEPARATOR);
    sb.append(messages.getMessageForMessageKey("import.bericht.log.optionLoescheFehlende", messages.lokalisiere(optionLoescheFehlende)));

    return sb.toString();
  }
}
