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

import java.util.Collection;
import java.util.List;
import java.util.regex.Pattern;

import javax.annotation.Nullable;

import org.apache.commons.lang3.StringUtils;

import de.ivu.elect.business.benutzerverwaltung.boundary.AbstractRolleDAO;
import de.ivu.elect.business.mandant.entity.EntityMitMandant;
import de.ivu.elect.business.mandant.entity.Mandant;


import static java.util.Objects.nonNull;

/**
 * on 07.02.2017.
 */
public abstract class AbstractBenutzerEinsatzort implements BenutzerEinsatzortBase, EntityMitMandant {

  private static final long serialVersionUID = 1L;

  public boolean matches(String ip) {
    if (StringUtils.isBlank(ip)) {
      return false;
    }

    if (StringUtils.isBlank(getClientIpMuster())) {
      return false;
    }

    return Pattern.compile(getClientIpMuster()).matcher(ip).matches();
  }

  public void setRollen(Collection<Rolle> rollen) {
    removeAllRolles();

    rollen.forEach(rolle -> {
      if (nonNull(rolle)) {
        addRolle(rolle);
      }
    });
  }

  @Override
  @Nullable
  public EntityMitMandant getParent() {
    return null;
  }

  @Override
  public abstract Mandant getMandant();

  public List<Rolle> getRolles(AbstractRolleDAO rolleDAO) {
    return rolleDAO.findByBenutzerEinsatzort((BenutzerEinsatzort) this);
  }
}
