package com.airlock.iam.common.infrastructure.util;

import com.airlock.iam.common.api.domain.model.cookie.KnownSameSitePolicy;
import com.airlock.iam.common.api.domain.model.cookie.SameSitePolicy;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletResponse;
import java.util.Objects;
import org.apache.tomcat.util.http.Rfc6265CookieProcessor;

public class CookieUtil {
   public static void setCookie(HttpServletResponse response, Cookie cookie, SameSitePolicy sameSitePolicy) {
      response.addHeader("Set-Cookie", getSetCookieValue(cookie, sameSitePolicy));
   }

   private static String getSetCookieValue(Cookie cookie, SameSitePolicy sameSitePolicy) {
      Rfc6265CookieProcessor processor = new Rfc6265CookieProcessor();
      if (sameSitePolicy.sameSiteValue() != null) {
         processor.setSameSiteCookies(sameSitePolicy.sameSiteValue());
      }

      if (Objects.equals(sameSitePolicy.sameSiteValue(), KnownSameSitePolicy.NONE.sameSiteValue())) {
         cookie.setSecure(true);
      }

      return processor.generateHeader(cookie, null);
   }
}
