
package de.ivu.elect.exchange.gebietsbaum;

import javax.annotation.Nullable;

import de.ivu.elect.business.anschrift.entity.Anschrift;
import de.ivu.elect.business.benutzerverwaltung.entity.Rolle;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.Gebietsart;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.exchange.BaseDTO;

public abstract class AbstractGebietDTO extends BaseDTO implements GebietDTO {

  protected AbstractGebietDTO() {
    super();
  }

  protected AbstractGebietDTO(Gebiet gebiet, Gebiet uebergeordnetesGebiet) {
    super();

    setGebietsartName(gebiet.getGebietsart().getName());
    setNummer(gebiet.getNummer());
    setNummerBezirk(gebiet.getNummerBezirk());
    setName(gebiet.getName());
    setKuerzel(gebiet.getKuerzel());
    setExterneId(gebiet.getExterneId());

    setRolleBearbeiten(getRolle(gebiet.getBearbeitenRolle()));
    setRolleEinsehen(getRolle(gebiet.getEinsehenRolle()));

    if (uebergeordnetesGebiet != null) {
      setUebergeordnetesGebietGebietsartName(uebergeordnetesGebiet.getGebietsart().getName());
      setUebergeordnetesGebietNummer(uebergeordnetesGebiet.getNummer());
    }

    setSonderstimmbezirk(gebiet.getSonderstimmbezirk());

    setAuswahlbezirk2(gebiet.getAuswahlbezirk());
    setUmfragebezirk2(gebiet.getUmfragebezirk());

    setWahlbeteiligungsbezirk2(gebiet.getWahlbeteiligungsbezirk());

    setBeweglicherWahlvorstand2(gebiet.getBeweglicherWahlvorstand());
    setBriefwahlInUrneErfassen2(gebiet.getBriefwahlInUrneErfassen());

    Anschrift anschrift = gebiet.getAnschrift();

    setAnschriftStrasse(anschrift.getStrasse());
    setAnschriftHausnummer(anschrift.getHausnummer());
    setAnschriftHausnummerzusatz(anschrift.getHausnummerzusatz());

    setAnschriftPlz(anschrift.getPlz());
    setAnschriftOrt(anschrift.getOrt());
    setAnschriftOrtsteil(anschrift.getOrtsteil());

    setAnschriftZustellanweisung(anschrift.getZustellanweisung());

    Personendaten ansprechpartner = gebiet.getAnsprechpartner();
    setAnsprechpartnerAnrede(ansprechpartner.getAnrede());
    setAnsprechpartnerFamilienname(ansprechpartner.getFamilienname());
    setAnsprechpartnerVorname(ansprechpartner.getRufname());
    setAnsprechpartnerBerufUnformatiert(ansprechpartner.getBerufUnformatiert());
    setAnsprechpartnerTelefonnummerMobil(ansprechpartner.getTelefonnummerMobil());
    setAnsprechpartnerTelefonnummerFestnetz(ansprechpartner.getTelefonnummerFestnetz());
    setBemerkung(ansprechpartner.getBemerkung());
  }

  @Nullable
  private String getRolle(@Nullable Rolle rolle) {
    if (rolle == null) {
      return null;
    }

    return rolle.getName();
  }

  @Override
  public Gebietsart getUebergeordnetesGebietGebietsart() {
    return getGebietsart(getUebergeordnetesGebietGebietsartName());
  }

  @Override
  public Gebietsart getGebietsart(String gebietsartName) {
    Gebietsart result = new Gebietsart();
    result.setName(gebietsartName);

    return result;
  }

  @Override
  public Long getWahlhelfereinsatzortNummer() {
    return Long.valueOf(getNummer());
  }

  @Override
  public void accept(Gebiet gebiet) {
    // nichts zu tun...
  }
}
