package com.airlock.iam.plugin.framework.infrastructure.io;

import com.airlock.iam.plugin.framework.application.service.ConfigWriter;
import com.airlock.iam.plugin.framework.application.service.IncludeAllFilter;
import com.airlock.iam.plugin.framework.application.service.PCModelToPersistenceTranslation;
import com.airlock.iam.plugin.framework.application.service.TranslatedConfigWriter;
import com.airlock.iam.plugin.framework.application.service.TranslationFilter;
import com.airlock.iam.plugin.framework.domain.model.MedusaConfigurationElement;
import com.airlock.iam.plugin.framework.misc.frompersistence.TranslatedMedusaConfiguration;
import com.google.common.base.Preconditions;
import java.io.OutputStream;

public class LegacyToNewTranslatedConfigModelWriter implements TranslatedConfigWriter {
   private final PCModelToPersistenceTranslation translator;
   private final ConfigWriter writer;

   public LegacyToNewTranslatedConfigModelWriter(PCModelToPersistenceTranslation translator, ConfigWriter writer) {
      this.translator = (PCModelToPersistenceTranslation)Preconditions.checkNotNull(translator);
      this.writer = (ConfigWriter)Preconditions.checkNotNull(writer);
   }

   @Override
   public void writeConfig(TranslatedMedusaConfiguration configuration, OutputStream out) throws ConfigWriter.ConfigWriterException {
      this.writeConfig(configuration, new IncludeAllFilter(), out);
   }

   @Override
   public void writeConfig(TranslatedMedusaConfiguration config, TranslationFilter filter, OutputStream out) throws ConfigWriter.ConfigWriterException {
      try {
         MedusaConfigurationElement configElement = this.translator.translate(config, filter);
         this.writer.write(configElement, out);
      } catch (ConfigWriter.ConfigWriterException e) {
         throw new ConfigWriter.ConfigWriterException("Failed to write the plugin config dictionary: " + e.getMessage(), e);
      }
   }
}
