package com.airlock.iam.admin.app.infrastructure;

import com.airlock.iam.admin.application.configuration.Adminapp;
import com.airlock.iam.admin.domain.model.administrator.permissions.Actions;
import com.airlock.iam.admin.domain.model.administrator.permissions.AdminappAction;
import com.airlock.iam.common.api.domain.model.authentication.Authentee;
import com.airlock.iam.core.misc.authorization.AccessControllerException;
import com.airlock.iam.plugin.configeditor.ApplicationRootInfo;
import com.airlock.iam.plugin.configeditor.session.HasAccessController;
import java.util.function.BooleanSupplier;

public final class AdminAppApplicationRootInfo implements ApplicationRootInfo {
   private final BooleanSupplier shouldLogConfigurationChanges = () -> Adminapp.get() != null
      && Adminapp.get().getLogViewer() != null
      && Adminapp.get().getLogViewer().shouldLogConfigChanges();
   private final HasAccessController hasAccessController = () -> Adminapp.get().getAccessControl().getAccessController();
   private final AdminappAction applyConfigAction = Actions.applyConfig;

   @Override
   public String applyConfigActionName() {
      return this.applyConfigAction.name();
   }

   @Override
   public BooleanSupplier shouldLogConfigurationChanges() {
      return this.shouldLogConfigurationChanges;
   }

   @Override
   public boolean isApplyConfigAllowedFor(Authentee authentee) throws AccessControllerException {
      return this.hasAccessController.accessController().isActionAllowedFor(this.applyConfigAction.name(), authentee);
   }
}
