package com.airlock.iam.common.infrastructure.plugin;

import com.airlock.iam.base.api.infrastructure.plugin.PluginConfigToLogic;
import com.google.inject.Injector;
import jakarta.inject.Inject;
import lombok.NonNull;

public final class PluginConfigToLogicImpl implements PluginConfigToLogic {
   private final Injector parentInjector;
   private final PluginLogicFinder logicFinder;

   @Inject
   public PluginConfigToLogicImpl(Injector parentInjector, PluginLogicFinder logicFinder) {
      this.parentInjector = parentInjector;
      this.logicFinder = logicFinder;
   }

   @Override
   public <T> T getLogic(@NonNull Object config) {
      if (config == null) {
         throw new NullPointerException("config is marked non-null but is null");
      } else {
         return this.logicFinder.findPluginLogic(config, this.parentInjector);
      }
   }
}
