package de.ivu.elect.presentation.gebietsbaum;

import java.io.Serializable;

import javax.inject.Inject;

import de.ivu.elect.business.CurrentCustomer;
import de.ivu.elect.business.gebietsbaum.boundary.GebietExtendedDAO;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.wahl.entity.NlWahlart;
import de.ivu.elect.presentation.security.NlPrivatePublicKeyNeeded;

public class NlGebietEditReadOnly implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient CurrentCustomer currentCustomer;

  @Inject
  private transient GebietExtendedDAO gebietExtendedDAO;

  @Inject
  private transient NlPrivatePublicKeyNeeded nlPrivatePublicKeyNeeded;

  public boolean isReadOnly(Gebiet gebietNotAttached) {
    if (gebietNotAttached == null) {
      return false;
    }

    if (NlWahlart.isWus(currentCustomer.getCustomer())) {
      return true;
    }

    Gebiet gebiet = gebietExtendedDAO.attach(gebietNotAttached);
    if (gebiet.getGebietsart().getBezirksart().isBezirk()) {
      return false; //  ELECTVAPP-1030
      // war mal, aber unklar wieso return !NlWahlart.isWasGemeinde(() -> findeWurzelgebiet(gebiet), currentCustomer.getCustomer());
    }

    return true;
  }

  private Gebiet findeWurzelgebiet(Gebiet gebiet) {
    Gebiet uebergeordnetesGebiet = gebiet.getUebergeordnetesGebiet();
    if (uebergeordnetesGebiet == null) {
      return gebiet;
    }
    return findeWurzelgebiet(uebergeordnetesGebiet);

  }
}
