
package de.ivu.elect.presentation.gebietsbaum.tree;

import java.io.Serializable;
import java.util.function.Supplier;

import javax.inject.Inject;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.GebietConstants;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.Icons;

public class GebietsbaumTreeNodeIconResolver implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient Icons icons;

  @Inject
  private transient GebietsbaumDynamicIconResolver gebietsbaumDynamicIconResolver;

  public String getIcon(Gebiet gebiet) {
    if (gebiet.isWahlgebiet()) {
      return icons.getIconWahlgebiet();
    }

    if (gebiet.isDirektwahlgebiet()) {
      return icons.getIconPerson();
    }

    if (gebiet.isListenwahlgebiet()) {
      return icons.getIconList();
    }

    return gebiet.getGebietsart().getGebietsartIcon().getIcon();
  }

  public String getTitle(Gebiet gebiet, Messages messages) {
    String result;

    if (gebiet.isWahlgebiet()) {
      result = messages.getMessageForMessageKey("gebietsbaum.tree.node.type.wahlgebiet");
    } else if (gebiet.isDirektwahlgebiet()) {
      result = messages.getMessageForMessageKey("gebietsbaum.tree.node.type.direkt");
    } else if (gebiet.isListenwahlgebiet()) {
      result = messages.getMessageForMessageKey("gebietsbaum.tree.node.type.liste");
    } else {
      result = gebiet.getGebietsart().getGebietsartTitle();
    }

    if (gebiet.getAuswahlbezirk()) {
      result += " (" + messages.getMessageForMessageKey(GebietConstants.MESSAGE_KEY_AUSWAHLBEZIRK_EINZAHL) + ")";
    }

    return result;
  }

  public boolean isDynamicIcon(Gebiet gebiet) {
    return gebietsbaumDynamicIconResolver.isDynamicIcon(() -> gebiet);
  }

  public String getDynamischesIcon(String icon, Supplier<Gebiet> gebiet) {
    return gebietsbaumDynamicIconResolver.getDynamischesIcon(icon, gebiet);
  }

  public String getDynamischenTitle(String title, Supplier<Gebiet> gebiet) {
    return gebietsbaumDynamicIconResolver.getDynamischenTitle(title, gebiet);
  }

  public String getDynamischenNameNummerFormatiert(String nameNummerFormatiert, Supplier<Gebiet> gebiet) {
    return gebietsbaumDynamicIconResolver.getDynamischenNameNummerFormatiert(nameNummerFormatiert, gebiet);
  }
}
