
package de.ivu.elect.business.personenpruefung.control.dubletten;

import static java.util.Collections.emptyList;

import java.util.Collection;
import java.util.Map;

import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.personenpruefung.control.AbstractPersonenPruefSchritt;
import de.ivu.elect.business.personenpruefung.entity.PersonenKonflikt;
import de.ivu.elect.business.personenpruefung.entity.PersonenKonfliktArt;
import de.ivu.elect.business.personenpruefung.entity.PersonenKonfliktStatus;

// NOTE, dass dies eine zu spezialisierende No-Op-Implementierung ist!
public class PersonenOrdnungsmerkmalUniquePruefSchritt extends AbstractPersonenPruefSchritt {

  public PersonenOrdnungsmerkmalUniquePruefSchritt() {
    super();
  }

  @Override
  public boolean isInstantPersonenPruefSchritt() {
    return true;
  }

  @Override
  public Collection<Class< ? extends Personendaten>> getRelevantPersonendatenClasses() {
    return emptyList();
  }

  @Override
  public boolean isPotentiellNichtGeeignet(Personendaten personendaten) {
    if (isRelevantPersonendatenInstance(personendaten) && personendaten.hasOrdnungsmerkmal()) {
      return !isOrdnungsmerkmalUniqueOrZulaessigeDublette(personendaten);
    }

    return false;
  }

  protected boolean isOrdnungsmerkmalUniqueOrZulaessigeDublette(Personendaten personendaten) {
    return true;
  }

  @Override
  public PersonenKonfliktArt getPersonenKonfliktArt() {
    // NOTE, dass dieser Wert bspw. den Namen des Prüfschrittes bestimmt, der in den Hinweismeldungen angezeigt wird!
    return PersonenKonfliktArt.POTENTIELLE_DUBLETTE;
  }

  @Override
  public PersonenKonfliktStatus getPersonenKonfliktStatus() {
    return PersonenKonfliktStatus.MANUELL_ZU_PRUEFEN;
  }

  @Override
  public Map<Personendaten, PersonenKonflikt> pruefe(Collection<Personendaten> personen) {
    // NOTE ELECTMUC-1047, dass die Implementierung momentan nicht benötigt wird. Falls sie benötigt wird, müssen noch
    // Dubletten gesucht, PersonenVerknüpfungen erstellt, etc, werden...
    throw new UnsupportedOperationException("Implement me, cf. " + AbstractPersonenDublettenPruefSchritt.class.getName());
  }
}
