
package de.ivu.elect.dokumente;

import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;

import de.ivu.document.generator.template.annotations.DocumentMethod;
import de.ivu.document.generator.template.annotations.DocumentParam;

public class ElectDocumentStichtag implements Serializable {

  private static final long serialVersionUID = 1L;

  private final BaseElectContext baseElectContext;

  private final Date wahlterminDatum;

  public ElectDocumentStichtag(BaseElectContext baseElectContext, Date wahlterminDatum) {
    super();

    this.baseElectContext = baseElectContext;

    this.wahlterminDatum = wahlterminDatum;
  }

  public String tageVorWahl() {
    return "";
  }

  public String tageVorWahlLang() {
    return "";
  }

  @DocumentMethod
  public String tageVorWahl(@DocumentParam("\"AnzahlTageVorWahldatum\"") String anzahlTageVorWahldatum) {
    try {
      return tageVorWahl(Long.parseLong(anzahlTageVorWahldatum));
    } catch (Exception ignored) {
    }

    return "";
  }

  @DocumentMethod
  public String tageVorWahlKurz(@DocumentParam("\"AnzahlTageVorWahldatum\"") String anzahlTageVorWahldatum) {
    try {
      return tageVorWahlKurz(Long.parseLong(anzahlTageVorWahldatum));
    } catch (Exception ignored) {
    }

    return "";
  }

  @DocumentMethod
  public String tageVorWahlLang(@DocumentParam("\"AnzahlTageVorWahldatum\"") String anzahlTageVorWahldatum) {
    try {
      return tageVorWahlLang(Long.parseLong(anzahlTageVorWahldatum));
    } catch (Exception ignored) {
    }

    return "";
  }

  public String tageVorWahl(Number anzahlTageVorWahldatum) {
    return baseElectContext.formatDateMedium(calculateTageVorWahl(anzahlTageVorWahldatum));
  }

  public String tageVorWahlKurz(Number anzahlTageVorWahldatum) {
    return baseElectContext.formatDateShort(calculateTageVorWahl(anzahlTageVorWahldatum));
  }

  public String tageVorWahlLang(Number anzahlTageVorWahldatum) {
    return baseElectContext.formatDateLong(calculateTageVorWahl(anzahlTageVorWahldatum));
  }

  private Date calculateTageVorWahl(Number anzahlTageVorWahldatum) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(wahlterminDatum);
    cal.add(Calendar.DATE, -1 * anzahlTageVorWahldatum.intValue());

    return new Date(cal.getTime().getTime());
  }

  @Override
  public String toString() {
    return "stichtag.tageVorWahl(1)";
  }
}
