
package de.ivu.elect.dokumente.wahlausschuss;

import java.math.BigDecimal;
import java.util.Optional;

import de.ivu.document.generator.template.annotations.DocumentComplexField;
import de.ivu.document.generator.template.annotations.DocumentSimpleField;
import de.ivu.elect.business.wahlausschuss.entity.WahlausschussEntschaedigung;
import de.ivu.elect.business.wahlausschuss.entity.Wahlausschussmitglied;
import de.ivu.elect.dokumente.CoreElectContext;
import de.ivu.elect.dokumente.PersonDokument;
import de.ivu.elect.dokumente.gebiet.GebietDokument;
import de.ivu.elect.dokumente.wahlvorschlag.GruppeDokument;

public class WahlausschussmitgliedOhneVertreterDokument extends PersonDokument {

  private static final long serialVersionUID = 1L;

  public static final WahlausschussmitgliedOhneVertreterDokument EMPTY_OBJECT = new WahlausschussmitgliedOhneVertreterDokument();

  @DocumentSimpleField("Rolle")
  public final String rolle;

  @DocumentSimpleField("IstVorsitzender")
  public final boolean isVorsitzender;

  @DocumentSimpleField("IstStellvertretenderVorsitzender")
  public final boolean isStellvertretenderVorsitzender;

  @DocumentSimpleField("IstSchriftfuehrer")
  public final boolean isSchriftfueher;

  @DocumentSimpleField("IstStellvertretenderSchriftfuehrer")
  public final boolean isStellvertretenderSchriftfuehrer;

  @DocumentSimpleField("IstBeisitzer")
  public final boolean isBeisitzer;

  @DocumentSimpleField("IstStellvertretenderBeisitzer")
  public final boolean isStellvertretenderBeisitzer;

  @DocumentSimpleField("IstHilfskraft")
  public final boolean isHilfskraft;

  @DocumentSimpleField("IstVorsitzenderOderBeisitzer")
  public final boolean isVorsitzenderOderBeisitzer;

  @DocumentComplexField("Gebiet")
  public final GebietDokument gebietDokument;

  @DocumentSimpleField("IstPolitischeGruppeZugeordnet")
  public final boolean isPolitischeGruppeVorhanden;

  @DocumentComplexField("PolitischeGruppe")
  public final GruppeDokument politischeGruppe;

  @DocumentSimpleField("IstVertreterVorhanden")
  public final boolean isVertreterVorhanden;

  @DocumentSimpleField("IstVertrittJemanden")
  public final boolean isVertrittJemanden;

  @DocumentSimpleField("IsVertreterVorhandenOderVertrittJemanden")
  public final boolean isVertreterVorhandenOderVertrittJemanden;

  @DocumentSimpleField("Betrag-Entschaedigung")
  public final BigDecimal betragEntschaedigung;

  @DocumentSimpleField("Betrag-Entschaedigung-Waehrung")
  public final String betragEntschaedigungWaehrung;

  @DocumentSimpleField("Betrag-Entschaedigung-Mit-Waehrung")
  public final String betragEntschaedigungMitWaehrung;

  @DocumentSimpleField("Betrag-Entschaedigung-Waehrungszeichen")
  public final String betragEntschaedigungWaehrungszeichen;

  @DocumentSimpleField("Betrag-Entschaedigung-Mit-Waehrungszeichen")
  public final String betragEntschaedigungMitWaehrungszeichen;

  protected WahlausschussmitgliedOhneVertreterDokument() {
    super();

    this.rolle = "";

    this.isVorsitzender = false;
    this.isStellvertretenderVorsitzender = false;
    this.isSchriftfueher = false;
    this.isStellvertretenderSchriftfuehrer = false;
    this.isBeisitzer = false;
    this.isStellvertretenderBeisitzer = false;
    this.isHilfskraft = false;
    this.isVorsitzenderOderBeisitzer = false;

    this.gebietDokument = GebietDokument.EMPTY_OBJECT;

    this.isPolitischeGruppeVorhanden = false;
    this.politischeGruppe = GruppeDokument.EMPTY_OBJECT;

    this.isVertreterVorhanden = false;
    this.isVertrittJemanden = false;
    this.isVertreterVorhandenOderVertrittJemanden = false;

    this.betragEntschaedigung = null;
    this.betragEntschaedigungWaehrung = null;
    this.betragEntschaedigungMitWaehrung = null;
    this.betragEntschaedigungWaehrungszeichen = null;
    this.betragEntschaedigungMitWaehrungszeichen = null;
  }

  public WahlausschussmitgliedOhneVertreterDokument(CoreElectContext coreElectContext, Wahlausschussmitglied wahlausschussmitglied) {
    super(coreElectContext, wahlausschussmitglied);

    this.rolle = coreElectContext.getMessageGendered(wahlausschussmitglied.getWahlausschussrolle(), wahlausschussmitglied.getGeschlecht());

    this.isVorsitzender = wahlausschussmitglied.getWahlausschussrolle().isVorsitzender();
    this.isStellvertretenderVorsitzender = wahlausschussmitglied.getWahlausschussrolle().isVorsitzenderStellvertretend();
    this.isSchriftfueher = wahlausschussmitglied.getWahlausschussrolle().isSchriftfueher();
    this.isStellvertretenderSchriftfuehrer = wahlausschussmitglied.getWahlausschussrolle().isSchriftfueherStellvertretend();
    this.isBeisitzer = wahlausschussmitglied.getWahlausschussrolle().isBeisitzer();
    this.isStellvertretenderBeisitzer = wahlausschussmitglied.getWahlausschussrolle().isBeisitzerStellvertretend();
    this.isHilfskraft = wahlausschussmitglied.getWahlausschussrolle().isHilfskraft();
    this.isVorsitzenderOderBeisitzer = this.isVorsitzender || this.isBeisitzer;

    this.gebietDokument = new GebietDokument(coreElectContext, wahlausschussmitglied.getGebiet());

    if (wahlausschussmitglied.getPolitischeGruppe() == null) {
      this.isPolitischeGruppeVorhanden = false;
      this.politischeGruppe = GruppeDokument.EMPTY_OBJECT;
    } else {
      this.isPolitischeGruppeVorhanden = true;
      this.politischeGruppe = new GruppeDokument(wahlausschussmitglied.getPolitischeGruppe());
    }

    this.isVertreterVorhanden = wahlausschussmitglied.isVertreterVorhanden();
    this.isVertrittJemanden = wahlausschussmitglied.isVertrittJemanden();
    this.isVertreterVorhandenOderVertrittJemanden = this.isVertreterVorhanden || this.isVertrittJemanden;

    Optional<WahlausschussEntschaedigung> wahlausschussEntschaedigungIfPresent = wahlausschussmitglied.getWahlausschussEntschaedigung(coreElectContext.getWahlausschussEntschaedigungDAO());

    if (wahlausschussEntschaedigungIfPresent.isPresent()) {
      WahlausschussEntschaedigung wahlausschussEntschaedigung = wahlausschussEntschaedigungIfPresent.get();

      BigDecimal betrag = wahlausschussEntschaedigung.getBetrag();
      String waehrungAlsIsoCode = wahlausschussEntschaedigung.getWaehrungAlsIsoCode();

      this.betragEntschaedigung = betrag;
      this.betragEntschaedigungWaehrung = coreElectContext.formatWaehrungskuerzel(waehrungAlsIsoCode);
      this.betragEntschaedigungMitWaehrung = coreElectContext.formatBetragMitWaehrungskuerzel(betrag, waehrungAlsIsoCode);
      this.betragEntschaedigungWaehrungszeichen = coreElectContext.formatWaehrungssymbol(waehrungAlsIsoCode);
      this.betragEntschaedigungMitWaehrungszeichen = coreElectContext.formatBetragMitWaehrungssymbol(betrag, waehrungAlsIsoCode);
    } else {
      this.betragEntschaedigung = null;
      this.betragEntschaedigungWaehrung = null;
      this.betragEntschaedigungMitWaehrung = null;
      this.betragEntschaedigungWaehrungszeichen = null;
      this.betragEntschaedigungMitWaehrungszeichen = null;
    }
  }
}
