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

import com.airlock.iam.admin.application.configuration.oauth2.OAuth2TokenController;
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;

public class OAuth2TokenPermissions implements TokenPermissionProvider {
   private Optional<OAuth2TokenController> tokenController;
   private AdminappAccessController accessController;

   @Override
   public void applyPermissions(PagePermissions.PagePermissionsBuilder page) {
      if (!this.tokenController.isEmpty()) {
         boolean editable = this.tokenController.get().consentRepository().isPresent() && this.accessController.isActionAllowed(Actions.manageOAuth2Consents);
         page.permission("consentAuthorizationServerSelection", editable)
            .permission("deleteAllOAuthConsentsForAuthorizationServer", editable)
            .permission("deleteAllOAuthConsentsForClient", editable)
            .permission("deleteOAuthConsent", editable);
      }
   }

   @SuppressFBWarnings(justification = "generated code")
   public OAuth2TokenPermissions(Optional<OAuth2TokenController> tokenController, AdminappAccessController accessController) {
      this.tokenController = tokenController;
      this.accessController = accessController;
   }
}
