package com.airlock.iam.servicecontainer.app.infrastructure.webapp.view;

import com.airlock.iam.servicecontainer.app.infrastructure.webapp.presenter.RadiusServicePresenter;
import com.airlock.iam.servicecontainer.app.infrastructure.webapp.util.TranslatedKeyValueTable;
import com.vaadin.shared.ui.MarginInfo;
import com.vaadin.ui.VerticalLayout;

public class RadiusView extends GenericServiceView {
   private final RadiusServicePresenter legacyRadiusServicePresenter;
   private TranslatedKeyValueTable<String, Long> packetsTable;

   public RadiusView(RadiusServicePresenter newLegacyRadiusServicePresenter) {
      super(newLegacyRadiusServicePresenter);
      this.legacyRadiusServicePresenter = newLegacyRadiusServicePresenter;
   }

   @Override
   public void init() {
      VerticalLayout layout = new VerticalLayout();
      layout.setSpacing(false);
      layout.setMargin(false);
      layout.addComponent(super.getLayout());
      VerticalLayout detailedLayout = new VerticalLayout();
      detailedLayout.setSpacing(false);
      detailedLayout.setMargin(new MarginInfo(true, false, true, false));
      layout.addComponent(detailedLayout);
      VerticalLayout innerLayout = new VerticalLayout();
      innerLayout.setSpacing(false);
      innerLayout.setMargin(new MarginInfo(false, true, false, true));
      detailedLayout.addComponent(innerLayout);
      this.packetsTable = TranslatedKeyValueTable.buildTable();
      innerLayout.addComponent(this.packetsTable);
      this.initPacketsTable();
      this.setCompositionRoot(layout);
   }

   private void initPacketsTable() {
      this.packetsTable.addKeyValuePair("legacyradiusservice.received-udp-packets", this.legacyRadiusServicePresenter.getNumberOfReceivedPackets());
      this.packetsTable.addKeyValuePair("legacyradiusservice.invalid-udp-packets", this.legacyRadiusServicePresenter.getNumberOfInvalidPackets());
      this.packetsTable.addKeyValuePair("legacyradiusservice.handled-radius-requests", this.legacyRadiusServicePresenter.getNumberOfHandledPackets());
      this.packetsTable.addKeyValuePair("legacyradiusservice.ignored-radius-requests", this.legacyRadiusServicePresenter.getNumberOfRetransmittedRequests());
   }

   private void updatePacketsTable() {
      this.packetsTable.update("legacyradiusservice.received-udp-packets", Long.toString(this.legacyRadiusServicePresenter.getNumberOfReceivedPackets()));
      this.packetsTable.update("legacyradiusservice.invalid-udp-packets", Long.toString(this.legacyRadiusServicePresenter.getNumberOfInvalidPackets()));
      this.packetsTable.update("legacyradiusservice.handled-radius-requests", Long.toString(this.legacyRadiusServicePresenter.getNumberOfHandledPackets()));
      this.packetsTable
         .update("legacyradiusservice.ignored-radius-requests", Long.toString(this.legacyRadiusServicePresenter.getNumberOfRetransmittedRequests()));
   }

   @Override
   public void update(ServiceContainerUI serviceContainerUI) {
      super.update(serviceContainerUI);
      if (serviceContainerUI.isAttached()) {
         serviceContainerUI.access(this::updatePacketsTable);
      }
   }
}
