package com.airlock.iam.admin.domain.service.token.generic;

import com.airlock.iam.admin.application.configuration.generic.ui.BooleanInputTokenControllerUiElementConfig;
import com.airlock.iam.admin.domain.model.administrator.permissions.Actions;
import com.airlock.iam.admin.domain.model.token.generic.BooleanInputGenericTokenUiElement;
import com.airlock.iam.admin.domain.model.token.generic.GenericTokenUiElement;
import com.airlock.iam.admin.domain.service.access.AdminappAccessController;
import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import jakarta.inject.Inject;
import jakarta.inject.Provider;

@LogicForConfig(BooleanInputTokenControllerUiElementConfig.class)
public final class BooleanInputTokenControllerUiElementService implements TokenControllerUiElementService {
   private final BooleanInputTokenControllerUiElementConfig config;
   private final Provider<AdminappAccessController> accessController;

   @Inject
   public BooleanInputTokenControllerUiElementService(BooleanInputTokenControllerUiElementConfig config, Provider<AdminappAccessController> accessController) {
      this.config = config;
      this.accessController = accessController;
   }

   @Override
   public GenericTokenUiElement getElement() {
      return BooleanInputGenericTokenUiElement.builder()
         .label(this.config.getLabel())
         .property(this.config.getProperty())
         .readOnly(this.config.isReadOnly() || !((AdminappAccessController)this.accessController.get()).isActionAllowed(Actions.editToken))
         .build();
   }
}
