
package de.ivu.elect.business.personenregister.control;

import static org.apache.commons.lang3.StringUtils.isNotBlank;

import java.util.Collection;

import javax.inject.Inject;

import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.personenregister.entity.PersonenregisterPersonendaten;
import de.ivu.elect.business.staat.entity.Staat;

public class KandidaturPersonenregisterPersonendatenMapper extends AbstractCorePersonendatenPersonenregisterPersonendatenMapper {

  private static final long serialVersionUID = 1L;

  @Inject
  protected transient CorePersonendatenPersonenregisterPersonendatenMatcher corePersonendatenPersonenregisterPersonendatenMatcher;

  public KandidaturPersonenregisterPersonendatenMapper() {
    super();
  }

  @Override
  public void mapAutomatischerAbgleich(Personendaten personendaten, PersonenregisterPersonendaten template, Collection<Staat> templateStaatsangehoerigkeiten) {
    String rufname = personendaten.getRufname();
    boolean rufnameVerschiedenZulaessig = isNotBlank(rufname) && isRufnameVerschieden(personendaten, template) && isBeliebigerVornameAusVornamenZulaessig(personendaten);

    super.mapAutomatischerAbgleich(personendaten, template, templateStaatsangehoerigkeiten);

    mapDefaultKandidaturdaten(personendaten, template);

    if (rufnameVerschiedenZulaessig) { // ELECT-15924
      personendaten.setRufname(rufname);
    }
  }

  @Override
  public void mapManuelleAuswahl(Personendaten personendaten, PersonenregisterPersonendaten template) {
    super.mapManuelleAuswahl(personendaten, template);

    mapDefaultKandidaturdaten(personendaten, template);
  }

  protected void mapDefaultKandidaturdaten(Personendaten personendaten, PersonenregisterPersonendaten template) {
    personendaten.setKuenstlername(template.getKuenstlername());
    personendaten.setOrdensname(template.getOrdensname());
  }

  private boolean isRufnameVerschieden(Personendaten personendaten, PersonenregisterPersonendaten template) {
    return corePersonendatenPersonenregisterPersonendatenMatcher.matchRufname(personendaten, template).isValueVerschieden();
  }

  private boolean isBeliebigerVornameAusVornamenZulaessig(Personendaten personendaten) {
    return corePersonendatenPersonenregisterPersonendatenMatcher.isBeliebigerVornameAusVornamenZulaessig(personendaten);
  }
}
