package com.airlock.iam.admin.application.service.permission.token;

import com.airlock.iam.admin.application.configuration.fido.FidoTokenControllerConfig;
import com.airlock.iam.admin.application.service.permission.PagePermissions;
import com.airlock.iam.admin.domain.model.administrator.permissions.Actions;
import com.airlock.iam.admin.domain.service.access.AdminappAccessController;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Optional;
import lombok.NonNull;

public final class FidoCredentialPermissions implements TokenPermissionProvider {
   @NonNull
   private final Optional<FidoTokenControllerConfig> tokenController;
   @NonNull
   private AdminappAccessController accessController;

   @Override
   public void applyPermissions(PagePermissions.PagePermissionsBuilder page) {
      if (this.tokenController.isPresent()) {
         page.permission("deleteFidoCredential", this.accessController.isActionAllowed(Actions.deleteToken));
         page.permission("disableFidoCredential", this.accessController.isActionAllowed(Actions.deactivateToken));
         page.permission("enableFidoCredential", this.accessController.isActionAllowed(Actions.activateToken));
      }
   }

   @SuppressFBWarnings(justification = "generated code")
   public FidoCredentialPermissions(@NonNull Optional<FidoTokenControllerConfig> tokenController, @NonNull AdminappAccessController accessController) {
      if (tokenController == null) {
         throw new NullPointerException("tokenController is marked non-null but is null");
      }

      if (accessController == null) {
         throw new NullPointerException("accessController is marked non-null but is null");
      }

      this.tokenController = tokenController;
      this.accessController = accessController;
   }
}
