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

import com.airlock.iam.admin.application.configuration.generic.ui.DateInputTokenControllerUiElementConfig;
import com.airlock.iam.admin.domain.model.administrator.permissions.Actions;
import com.airlock.iam.admin.domain.model.token.generic.DateTimeInputGenericTokenUiElement;
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(DateInputTokenControllerUiElementConfig.class)
public final class DateInputTokenControllerUiElementService implements TokenControllerUiElementService {
   private final DateInputTokenControllerUiElementConfig config;
   private final Provider<AdminappAccessController> accessController;

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

   @Override
   public GenericTokenUiElement getElement() {
      return DateTimeInputGenericTokenUiElement.builder()
         .label(this.config.getLabel())
         .property(this.config.getProperty())
         .placeholder(this.config.getPlaceholder().orElse(null))
         .readOnly(this.config.isReadOnly() || !((AdminappAccessController)this.accessController.get()).isActionAllowed(Actions.editToken))
         .dateOnly(this.config.isDateOnly())
         .hideIfEmpty(this.config.isHideIfEmpty())
         .required(this.config.isRequired())
         .build();
   }
}
