package com.airlock.iam.common.domain.model.encoder;

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.common.api.domain.model.encoder.StringEncoder;
import com.airlock.iam.common.application.configuration.encoder.Base64StringEncoderConfig;
import jakarta.inject.Inject;
import org.apache.commons.codec.binary.Base64;

@LogicForConfig(Base64StringEncoderConfig.class)
public final class Base64StringEncoder implements StringEncoder {
   private final Base64StringEncoderConfig config;

   @Inject
   public Base64StringEncoder(Base64StringEncoderConfig config) {
      this.config = config;
   }

   @Override
   public String encodeString(String input) {
      return this.config.isUrlSafeEncoding()
         ? Base64.encodeBase64URLSafeString(input.getBytes(this.config.getEncodingScheme()))
         : Base64.encodeBase64String(input.getBytes(this.config.getEncodingScheme()));
   }
}
