package com.airlock.iam.oauth2.domain.model.logging;

import com.airlock.iam.base.misc.log.LogUtil;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

public final class MaskingTokenRepresentation implements OAuth2TokenRepresentation {
   private final int numberOfLeadingCharacters;
   private final int numberOfTrailingCharacters;

   @Override
   public String apply(String token) {
      return token == null ? "" : LogUtil.hideMiddlePart(token, this.numberOfLeadingCharacters, this.numberOfTrailingCharacters);
   }

   @SuppressFBWarnings(justification = "generated code")
   public static MaskingTokenRepresentation.MaskingTokenRepresentationBuilder builder() {
      return new MaskingTokenRepresentation.MaskingTokenRepresentationBuilder();
   }

   @SuppressFBWarnings(justification = "generated code")
   public MaskingTokenRepresentation(int numberOfLeadingCharacters, int numberOfTrailingCharacters) {
      this.numberOfLeadingCharacters = numberOfLeadingCharacters;
      this.numberOfTrailingCharacters = numberOfTrailingCharacters;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class MaskingTokenRepresentationBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private int numberOfLeadingCharacters;
      @SuppressFBWarnings(justification = "generated code")
      private int numberOfTrailingCharacters;

      @SuppressFBWarnings(justification = "generated code")
      MaskingTokenRepresentationBuilder() {
      }

      @SuppressFBWarnings(justification = "generated code")
      public MaskingTokenRepresentation.MaskingTokenRepresentationBuilder numberOfLeadingCharacters(int numberOfLeadingCharacters) {
         this.numberOfLeadingCharacters = numberOfLeadingCharacters;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public MaskingTokenRepresentation.MaskingTokenRepresentationBuilder numberOfTrailingCharacters(int numberOfTrailingCharacters) {
         this.numberOfTrailingCharacters = numberOfTrailingCharacters;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public MaskingTokenRepresentation build() {
         return new MaskingTokenRepresentation(this.numberOfLeadingCharacters, this.numberOfTrailingCharacters);
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "MaskingTokenRepresentation.MaskingTokenRepresentationBuilder(numberOfLeadingCharacters="
            + this.numberOfLeadingCharacters
            + ", numberOfTrailingCharacters="
            + this.numberOfTrailingCharacters
            + ")";
      }
   }
}
