package com.airlock.iam.base.misc.util;

import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.Base64.Encoder;

public final class Base64Util {
   public static byte[] decode(String base64) {
      return Base64.getDecoder().decode(base64);
   }

   public static byte[] decode(byte[] base64) {
      return Base64.getDecoder().decode(base64);
   }

   public static byte[] decodeUrlSafe(String base64) {
      return Base64.getUrlDecoder().decode(base64);
   }

   public static String encodeToString(byte[] input) {
      return Base64.getEncoder().encodeToString(input);
   }

   public static String encodeToStringWithoutPadding(byte[] input) {
      return Base64.getEncoder().withoutPadding().encodeToString(input);
   }

   public static String encodeToString(String input) {
      return encodeToString(input.getBytes(StandardCharsets.UTF_8));
   }

   public static String encodeUrlSafeToString(byte[] input) {
      return encodeUrlSafeToString(input, false);
   }

   public static String encodeUrlSafeToString(byte[] input, boolean withoutPadding) {
      Encoder encoder = Base64.getUrlEncoder();
      if (withoutPadding) {
         encoder = encoder.withoutPadding();
      }

      return encoder.encodeToString(input);
   }

   @SuppressFBWarnings(justification = "generated code")
   private Base64Util() {
   }
}
