package de.ivu.elect.business.gebietsbaum.boundary;

import java.io.Serializable;

import javax.enterprise.event.Event;
import javax.inject.Inject;

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

import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.WahlPK;
import de.ivu.elect.business.wahl.entity.Wahltermin;
import de.ivu.elect.business.wahl.entity.WahlterminPK;

/**
 * ELECT-11941
 */
public class WurzelgebietNotUniqueEvent implements Serializable {

  private static final Logger LOG = LoggerFactory.getLogger(WurzelgebietNotUniqueEvent.class);

  private static final long serialVersionUID = 1L;

  @Inject
  private transient Event<WurzelgebietNotUniqueEvent> event;

  private final WahlterminPK wahlterminPK;

  private final WahlPK wahlPK;

  protected WurzelgebietNotUniqueEvent(WahlterminPK wahlterminPK, WahlPK wahlPK) {
    this.wahlterminPK = wahlterminPK;
    this.wahlPK = wahlPK;
  }

  protected WurzelgebietNotUniqueEvent() {
    this(null, null);
  }

  public void fire(Wahl wahl) {
    if (wahl != null) {
      fire(wahl.getPk());
    }
  }

  public void fire(WahlPK pk) {
    if (pk != null) {
      fire(new WurzelgebietNotUniqueEvent(null, pk));

    }
  }

  private void fire(WurzelgebietNotUniqueEvent event) {
    LOG.info("Fire WurzelgebietNotUniqueEvent: " + event);
    this.event.fire(event);
  }

  public void fire(Wahltermin wahltermin) {
    if (wahltermin != null) {
      fire(wahltermin.getPk());
    }
  }

  public void fire(WahlterminPK pk) {
    if (pk != null) {
      fire(new WurzelgebietNotUniqueEvent(pk, null));
    }
  }

  public WahlterminPK getWahlterminPK() {
    return wahlterminPK;
  }

  public WahlPK getWahlPK() {
    return wahlPK;
  }

  @Override
  public String toString() {
    return "WurzelgebietNotUniqueEvent{" +
        "wahlterminPK=" + wahlterminPK +
        ", wahlPK=" + wahlPK +
        '}';
  }
}
