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

import com.airlock.iam.plugin.framework.application.configuration.MutablePluginConfiguration;
import com.airlock.iam.plugin.framework.domain.model.Plugin;
import java.util.Optional;

class PluginUUIDResolver extends PluginRelationshipResolver {
   public PluginUUIDResolver(TranslationState translation) {
      super(translation);
   }

   @Override
   protected Optional<String> determineIdentifier(Plugin plugin) {
      return plugin.getUuid();
   }

   protected PluginUUIDResolver.PluginUUIDIsNotUniqueException newIdentifierNotUniqueException(String id) {
      return new PluginUUIDResolver.PluginUUIDIsNotUniqueException(id);
   }

   @Override
   protected boolean needsToBeResolved(Plugin plugin) {
      return plugin.getUuidRef().isPresent();
   }

   @Override
   protected void performAction(MutablePluginConfiguration referee, Plugin refereePlugin, MutablePluginConfiguration referenced) {
      this.getTranslationResult().updateTranslation(refereePlugin, referenced);
   }

   @Override
   protected String determineIDOfReferencedPlugin(Plugin plugin) {
      return plugin.getUuidRef().get();
   }

   static class PluginUUIDIsNotUniqueException extends PersistenceModelToPCModelTranslation.PersistenceModelToPCModelTranslationException {
      PluginUUIDIsNotUniqueException(String notUniqueUUID) {
         super(String.format("The uuid %s is not unique. Have at least two plugins with this uuid.", notUniqueUUID));
      }
   }
}
