package com.airlock.iam.oauth2.infrastructure.provider;

import com.airlock.iam.common.domain.model.request.ContextPath;
import com.airlock.iam.common.infrastructure.util.CookieUtil;
import com.airlock.iam.core.misc.util.ServletUtils;
import com.airlock.iam.oauth2.api.domain.model.OpenIdConnectSessionManagementSettings;
import com.airlock.iam.oauth2.domain.model.session.OpenIDProviderUserAgentState;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public final class OpenIDConnectOpuasCookieWriter {
   private static final String OPUAS_COOKIE_NAME = "IAM_OP_USER_AGENT_STATE";

   public static void writeCookie(
      HttpServletResponse response,
      ContextPath contextPath,
      OpenIDProviderUserAgentState opuas,
      OpenIdConnectSessionManagementSettings.SessionManagementSameSitePolicy sameSitePolicy
   ) {
      Cookie cookie = new Cookie("IAM_OP_USER_AGENT_STATE", opuas.getState());
      cookie.setHttpOnly(false);
      cookie.setPath(contextPath.getPath());
      CookieUtil.setCookie(response, cookie, sameSitePolicy);
   }

   public static void removeOpuasCookie(HttpServletResponse response, ContextPath contextPath) {
      Cookie cookie = new Cookie("IAM_OP_USER_AGENT_STATE", "");
      cookie.setMaxAge(0);
      cookie.setHttpOnly(false);
      cookie.setPath(contextPath.getPath());
      CookieUtil.setCookie(response, cookie, OpenIdConnectSessionManagementSettings.SessionManagementSameSitePolicy.LAX);
   }

   public static boolean requestContainsOpuasCookie(HttpServletRequest request) {
      return ServletUtils.getCookie(request, "IAM_OP_USER_AGENT_STATE") != null;
   }

   private OpenIDConnectOpuasCookieWriter() {
   }
}
