package com.airlock.iam.plugin.framework.misc;

import com.airlock.iam.plugin.framework.application.service.ConfigReader;
import com.airlock.iam.plugin.framework.application.service.ConfigWriter;
import com.airlock.iam.plugin.framework.application.service.TranslatedConfigReader;
import com.airlock.iam.plugin.framework.application.service.TranslatedConfigWriter;
import com.airlock.iam.plugin.framework.infrastructure.factory.PluginFrameworkFactory;
import com.airlock.iam.system.config.ConfigFormat;

public final class PluginFramework {
   private static final PluginFrameworkFactory FACTORY = new PluginFrameworkFactory();

   public static TranslatedConfigReader getTranslatedConfigReader(ConfigFormat format) {
      return switch (format) {
         case XML_FORMAT -> FACTORY.createTranslatedXMLConfigReader();
         case YAML_FORMAT -> FACTORY.createTranslatedYAMLConfigReader();
      };
   }

   public static ConfigReader getConfigReader(ConfigFormat format) {
      return switch (format) {
         case XML_FORMAT -> FACTORY.createXMLConfigReader();
         case YAML_FORMAT -> FACTORY.createYAMLConfigReader();
      };
   }

   public static TranslatedConfigWriter getTranslatedConfigWriter(ConfigFormat format) {
      return switch (format) {
         case XML_FORMAT -> FACTORY.createTranslatedXMLConfigWriter();
         case YAML_FORMAT -> FACTORY.createTranslatedYAMLConfigWriter();
      };
   }

   public static ConfigWriter getConfigWriter(ConfigFormat format) {
      return switch (format) {
         case XML_FORMAT -> FACTORY.createXMLConfigWriter();
         case YAML_FORMAT -> FACTORY.createYAMLConfigWriter();
      };
   }

   private PluginFramework() {
      throw new AssertionError();
   }
}
