
package de.ivu.elect.business.ergebnis.control;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import de.ivu.elect.business.ergebnis.entity.Stimmen;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.kandidatur.entity.Listenkandidatur;
import de.ivu.elect.business.wahlvorschlag.entity.Liste;

public class StimmeingabeErgebnisuebernahmeStimmenEntferntLogger {

  protected static final Logger LOG = LoggerFactory.getLogger(StimmeingabeErgebnisuebernahmeStimmenEntferntLogFile.class);

  protected static final String LOG_PREFIX = "Kandidat nicht mehr zugelassen (Zulassungsfaehigkeit beim Ausschuss nicht vorhanden) - ";

  protected static final String CSV_HEADER = "Zeitpunkt;Wahl;Gebiet;Liste Kennwort;Liste Kurzname;Listenposition;Kandidat-Familienname;Kandidat-Vorname;Anzahl Stimmen";

  public StimmeingabeErgebnisuebernahmeStimmenEntferntLogger() {
    super();
  }

  public void writeLogEintrag(Stimmen stimmen) {
    writeCsvEintrag(createCsvEintrag(stimmen));
  }

  protected void writeCsvEintrag(String csvEintrag) {
    LOG.info(LOG_PREFIX + "Stimmen werden als NICHT ERGEBNISRELEVANT markiert, von den GUELTIGEN STIMMEN ABGEZOGEN und zu den UNGUELTIGEN STIMMEN HINZUGEFUEGT");
    LOG.info(LOG_PREFIX + CSV_HEADER);
    LOG.info(LOG_PREFIX + csvEintrag);
  }

  protected String createCsvEintrag(Stimmen stimmen) {
    StringBuilder result = new StringBuilder();

    Gebiet gebiet = stimmen.getGebiet();
    Listenkandidatur listenkandidatur = stimmen.getListenkandidatur();

    if (gebiet != null && listenkandidatur != null) {
      Liste liste = listenkandidatur.getListe();

      result.append("\"" + new SimpleDateFormat("dd.MM.YYYY HH:mm:ss").format(new Date()) + "\";");
      result.append("\"" + gebiet.getWahl().getName() + "\";");
      result.append("\"" + gebiet.getName() + "\";");
      result.append("\"" + liste.getKennwort() + "\";");
      result.append("\"" + liste.getKurzname() + "\";");
      result.append((listenkandidatur.getVorgegebenePosition() == null ? "" : listenkandidatur.getVorgegebenePosition()) + ";");
      result.append("\"" + listenkandidatur.getFamilienname() + "\";");
      result.append("\"" + listenkandidatur.getRufname() + "\";");
      result.append(stimmen.getAnzahl() + "\n");
    }

    return result.toString();
  }
}
