package com.airlock.iam.plugin.configeditor.ui.panel;

import com.airlock.iam.plugin.configeditor.util.GuiResources;
import com.vaadin.server.Sizeable.Unit;
import com.vaadin.shared.ui.ContentMode;
import com.vaadin.ui.Component;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout;
import java.util.function.Supplier;
import org.apache.commons.lang3.StringUtils;

final class DocsPanel implements PanelContainer {
   private final Panel panel = new Panel();
   private final Supplier<String> dataSource;
   private String textToDisplay;
   private final Label textarea;

   public DocsPanel(Supplier<String> dataSource) {
      this.dataSource = dataSource;
      this.panel.setWidth(100.0F, Unit.PERCENTAGE);
      this.panel.addStyleName("minimal");
      VerticalLayout vl = new VerticalLayout();
      vl.setSpacing(false);
      this.textarea = new Label();
      this.textarea.setWidth(100.0F, Unit.PERCENTAGE);
      this.textarea.setContentMode(ContentMode.HTML);
      this.displayText(null);
      vl.addComponent(this.textarea);
      this.panel.setContent(vl);
      this.panel.setId("docsPanel");
   }

   private String infoIcon() {
      return "<img style=\"vertical-align: inherit;\" width=\"16\" height=\"16\" src=\"VAADIN/themes/medusa/" + GuiResources.ICON_INFO.getResourceId() + "\"/>";
   }

   @Override
   public void update() {
      this.displayText(this.dataSource.get());
   }

   private void displayText(String preFormattedText) {
      String newText = StringUtils.trimToEmpty(preFormattedText);
      if (!newText.equals(this.textToDisplay)) {
         if (StringUtils.isEmpty(newText)) {
            newText = "Click on an info icon " + this.infoIcon() + " to display its documentation.";
         }

         this.textToDisplay = newText;
         this.textarea.setValue(newText);
      }
   }

   @Override
   public Component getContent() {
      return this.panel;
   }
}
