package com.airlock.iam.login.app.misc.oneshot.impl;

import com.airlock.iam.core.domain.model.http.HttpRequest;
import com.airlock.iam.core.domain.model.http.signature.verifier.HttpRequestHeaderPresentCondition;
import com.airlock.iam.core.domain.model.http.signature.verifier.HttpSignatureHeadersVerifierCondition;
import com.airlock.iam.plugin.api.annotation.config.Plugin;
import com.airlock.iam.plugin.api.annotation.property.PluginProperty;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

@Plugin(description = "Checks if the header is present in the request.", displayName = "HTTP Request Header Is Present")
public final class HttpRequestHeaderPresentConditionConfig implements HttpSignatureHeadersVerifierConditionConfig {
   @PluginProperty(
      displayName = "HTTP Request Header",
      description = "The header that must be present in the request for this condition to be met.",
      optional = false
   )
   private StringHttpSignatureHeader httpSignatureHeader;

   @Override
   public HttpSignatureHeadersVerifierCondition condition(HttpRequest request) {
      return new HttpRequestHeaderPresentCondition(request, this.httpSignatureHeader.header().getName());
   }

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

   @SuppressFBWarnings(justification = "generated code")
   public HttpRequestHeaderPresentConditionConfig() {
   }

   @SuppressFBWarnings(justification = "generated code")
   public HttpRequestHeaderPresentConditionConfig(StringHttpSignatureHeader httpSignatureHeader) {
      this.httpSignatureHeader = httpSignatureHeader;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class HttpRequestHeaderPresentConditionConfigBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private StringHttpSignatureHeader httpSignatureHeader;

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

      @SuppressFBWarnings(justification = "generated code")
      public HttpRequestHeaderPresentConditionConfig.HttpRequestHeaderPresentConditionConfigBuilder httpSignatureHeader(
         StringHttpSignatureHeader httpSignatureHeader
      ) {
         this.httpSignatureHeader = httpSignatureHeader;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public HttpRequestHeaderPresentConditionConfig build() {
         return new HttpRequestHeaderPresentConditionConfig(this.httpSignatureHeader);
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "HttpRequestHeaderPresentConditionConfig.HttpRequestHeaderPresentConditionConfigBuilder(httpSignatureHeader=" + this.httpSignatureHeader + ")";
      }
   }
}
