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

import com.airlock.iam.admin.application.configuration.certificate.CertificateTokenController;
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 CertificateTokenPermissions implements TokenPermissionProvider {
   private Optional<CertificateTokenController> tokenController;
   private AdminappAccessController accessController;

   @Override
   public void applyPermissions(PagePermissions.PagePermissionsBuilder page) {
      if (this.tokenController.isPresent()) {
         page.permission("deleteCertificate", this.allowed(Actions.deleteToken))
            .permission("addCertificate", this.allowed(Actions.editToken))
            .permission("saveCertificate", this.allowed(Actions.editToken));
      }
   }

   private boolean allowed(Actions action) {
      return this.accessController.isActionAllowed(action);
   }

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