
package de.ivu.elect.dokumente.wahlvorschlag;

import de.ivu.document.generator.template.annotations.DocumentSimpleField;
import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.gruppe.entity.GruppeArt;
import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet;
import de.ivu.elect.dokumente.CoreElectContext;

public class WahlvorschlagstraegerDokument extends AbstractGruppeDokument {

  private static final long serialVersionUID = 1L;

  @DocumentSimpleField("Name")
  public final String name;

  @DocumentSimpleField("Kurzname")
  public final String kurzname;

  @DocumentSimpleField("Gruppe-Art")
  public final String gruppeArt;

  @DocumentSimpleField("Gruppe-Art-Formatiert")
  public final String gruppeArtFormatiert;

  @DocumentSimpleField("Gruppe-Art-Ist-Partei")
  public final Boolean gruppeArtIsPartei;

  @DocumentSimpleField("Gruppe-Art-Ist-Vereinigung")
  public final Boolean gruppeArtIsVereinigung;

  @DocumentSimpleField("Gruppe-Art-Ist-Waehlergruppe")
  public final Boolean gruppeArtIsWaehlergruppe;

  @DocumentSimpleField("Gruppe-Art-Ist-Waehlergruppe-Oder-Vereinigung")
  public final Boolean gruppeArtIsWaehlergruppeOrVereinigung;

  @DocumentSimpleField("Gruppe-Art-Ist-Einzelbewerber")
  public final Boolean gruppeArtIsEinzelbewerber;

  @DocumentSimpleField("Position")
  public final Long position;

  public WahlvorschlagstraegerDokument(CoreElectContext coreElectContext) {
    this(coreElectContext, null, "", "", null);
  }

  public WahlvorschlagstraegerDokument(CoreElectContext coreElectContext, GruppeImGebiet gruppeImGebiet) {
    this(coreElectContext, gruppeImGebiet.getGruppe(), gruppeImGebiet.getNameAufGebiet(), gruppeImGebiet.getKurznameAufGebiet(), gruppeImGebiet.getRelativePosition());
  }

  public WahlvorschlagstraegerDokument(CoreElectContext coreElectContext, Gruppe gruppe, String name, String kurzname, Long position) {
    super(gruppe);

    if (gruppe == null) {
      this.gruppeArt = "";
      this.gruppeArtFormatiert = "";
      this.gruppeArtIsPartei = false;
      this.gruppeArtIsVereinigung = false;
      this.gruppeArtIsWaehlergruppe = false;
      this.gruppeArtIsWaehlergruppeOrVereinigung = false;
      this.gruppeArtIsEinzelbewerber = false;
    } else {
      GruppeArt gruppeArt = gruppe.getGruppeArt();

      this.gruppeArt = gruppeArt.name();
      this.gruppeArtFormatiert = coreElectContext.getMessage(gruppeArt);
      this.gruppeArtIsPartei = GruppeArt.PARTEI.equals(gruppeArt);
      this.gruppeArtIsVereinigung = GruppeArt.VEREINIGUNG.equals(gruppeArt);
      this.gruppeArtIsWaehlergruppe = GruppeArt.WAEHLERGRUPPE.equals(gruppeArt);
      this.gruppeArtIsWaehlergruppeOrVereinigung = this.gruppeArtIsWaehlergruppe || this.gruppeArtIsVereinigung;
      this.gruppeArtIsEinzelbewerber = gruppeArt.isEinzelbewerber();
    }

    this.name = name;
    this.kurzname = kurzname;
    this.position = position;
  }
}
