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

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

   @Override
   public void applyPermissions(PagePermissions.PagePermissionsBuilder page) {
      if (this.tokenController.isPresent()) {
         this.addTokenPermissions(this.tokenController.get(), page);
      }
   }

   private void addTokenPermissions(SecretQuestionsTokenController controller, PagePermissions.PagePermissionsBuilder page) {
      page.permission("enableSecretQuestions", this.allowed(Actions.activateToken))
         .permission("disableSecretQuestions", this.allowed(Actions.deactivateToken))
         .permission("deleteSecretQuestion", this.allowed(Actions.deleteToken))
         .permission("unlockSecretQuestion", this.allowed(Actions.editToken))
         .permission("checkSecretQuestion", controller.getSecretQuestionsSettings().isAllowAdminAnswerCheck());
   }

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

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