package com.airlock.iam.common.application.configuration.state;

import com.airlock.iam.common.api.domain.model.cookie.KnownSameSitePolicy;
import com.airlock.iam.common.api.domain.model.cookie.SameSitePolicy;
import com.airlock.iam.plugin.framework.domain.model.property.EnumPropertyTranslator;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

public enum IamSessionSameSitePolicy implements EnumPropertyTranslator {
   STRICT("Strict", KnownSameSitePolicy.STRICT),
   LAX("Lax", KnownSameSitePolicy.LAX),
   NONE("None", KnownSameSitePolicy.NONE),
   UNDEFINED("No SameSite Attribute", KnownSameSitePolicy.UNDEFINED);

   public static final String SAME_SITE_PROPERTY_DISPLAY_NAME = "Session Cookie SameSite Policy";
   public static final String SAME_SITE_PROPERTY_DESCRIPTION = "<p>Specifies the 'SameSite' cookie attribute of the IAM session cookie 'iam-session-id'. The 'Secure' attribute is automatically set based on whether the request was performed using http or https (see exception for 'None' below).</p><ul><li>Strict: The cookie is not sent in cross-origin requests.</li><li>Lax: The cookie is sent in some cross-origin requests, such as GET requests.</li><li>None: The cookie is sent in cross-origin requests. In this case, the 'Secure' Cookie-Attribute is always set, regardless of whether the request was performed using http or https.Use this setting when using SAML2 in combination with cross-domain POST Bindings.</li><li>No SameSite Attribute: No attribute is set. Browsers apply their default behaviour, usually 'Lax'.</li></ul>";
   private final String displayValue;
   private final SameSitePolicy policy;

   @SuppressFBWarnings(justification = "generated code")
   IamSessionSameSitePolicy(final String displayValue, final SameSitePolicy policy) {
      this.displayValue = displayValue;
      this.policy = policy;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getDisplayValue() {
      return this.displayValue;
   }

   @SuppressFBWarnings(justification = "generated code")
   public SameSitePolicy getPolicy() {
      return this.policy;
   }
}
