
package de.ivu.elect.business.benutzerverwaltung.entity;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.jee.faces.Messages;

public class RollePermissionPickListProperty extends AbstractUseCasePermissionPickListProperty {

  private final Rolle rolle;

  public RollePermissionPickListProperty(Rolle rolle, List<UseCasePermission> verfuegbareRechte, Messages messages) {
    super(verfuegbareRechte, messages);

    this.rolle = rolle;
  }

  @Override
  public String getDefaultLabel() {
    return getMessage("entity.mehrzahl.RECHT");
  }

  @Override
  protected String getTargetCaptionMessageKey() {
    return "rolle.edit.permissions.target";
  }

  @Override
  protected List<UseCasePermission> getZugeordneteElemente() {
    ArrayList<UseCasePermission> zugeordneteRechte = new ArrayList<>(rolle.getRecht());
    zugeordneteRechte.remove(UseCasePermission.OHNE); // soll nicht manuell zugewiesen werden können (ELECT-1361)
    return sortByLabel(zugeordneteRechte);
  }

  @Override
  protected void setzeZugeordneteElemente(List<UseCasePermission> target) {
    loescheAlleVorhandenenPermissions();

    rolle.addPermissions(target);
  }

  private void loescheAlleVorhandenenPermissions() {
    Collection<UseCasePermission> permissions = new ArrayList<>(rolle.getRecht());

    for (UseCasePermission permission : permissions) {
      rolle.removeRecht(permission);
    }
  }

////  private transient Set<UseCasePermission> ausgegeben = new HashSet<>();
//
//  @Override
//  public String getItemLabel(UseCasePermission element) {
////    if (element!=null) {
////      if (ausgegeben.add(element)) {
////        if (rolle.getRecht().contains(element)) {
////          System.out.println("Zugeordnet: " + super.getItemLabel(element) + " - " + element);
////        } else {
////          System.out.println("Nicht zugeordnet: " + super.getItemLabel(element) + " - " + element);
////        }
////      }
////    }
//
//    return super.getItemLabel(element);
//  }
}
