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

import com.vaadin.event.MouseEvents.ClickListener;
import com.vaadin.server.ThemeResource;
import com.vaadin.server.Sizeable.Unit;
import com.vaadin.shared.ui.ContentMode;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Component;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Image;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.v7.ui.ProgressBar;
import jakarta.annotation.Nullable;

public class StatusPanel extends Panel {
   private final Label statusLabel;
   private final HorizontalLayout layout = new HorizontalLayout();

   public StatusPanel(String caption) {
      super(caption);
      this.layout.setSizeFull();
      this.layout.setMargin(true);
      this.setContent(this.layout);
      this.statusLabel = new Label();
      this.statusLabel.setWidth(100.0F, Unit.PERCENTAGE);
      this.statusLabel.setContentMode(ContentMode.HTML);
   }

   public void showProgressIndicator(String message) {
      ProgressBar progress = new ProgressBar();
      progress.setIndeterminate(true);
      progress.setEnabled(true);
      progress.setVisible(true);
      this.showMessage(progress, message);
   }

   public void showMessage(@Nullable Component rightComponent, String message) {
      this.layout.removeAllComponents();
      this.layout.addComponent(this.statusLabel);
      this.layout.setComponentAlignment(this.statusLabel, Alignment.MIDDLE_LEFT);
      this.layout.setExpandRatio(this.statusLabel, 1.0F);
      if (rightComponent != null) {
         this.layout.addComponent(rightComponent);
         this.layout.setComponentAlignment(rightComponent, Alignment.MIDDLE_RIGHT);
         this.layout.setExpandRatio(rightComponent, 0.0F);
      }

      this.updateStatusMessage(message);
   }

   public void displayBigButton(String caption, ThemeResource icon, ClickListener listener) {
      this.layout.removeAllComponents();
      Image bigFatButton = new Image(caption, icon);
      bigFatButton.addStyleName("with-hand");
      bigFatButton.addClickListener(listener);
      bigFatButton.setHeight(40.0F, Unit.PIXELS);
      bigFatButton.setId("goLiveIcon");
      this.layout.addComponent(bigFatButton);
      this.layout.setComponentAlignment(bigFatButton, Alignment.MIDDLE_CENTER);
   }

   public void updateStatusMessage(String message) {
      this.statusLabel.setValue(message);
   }
}
