package com.airlock.iam.authentication.infrastructure.rememberme;

import com.airlock.iam.authentication.domain.model.rememberme.RememberMeCookie;
import com.airlock.iam.common.api.domain.model.cookie.KnownSameSitePolicy;
import com.airlock.iam.common.infrastructure.util.CookieUtil;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;

public final class RememberMeCookieHeaderValueFactory {
   public static void setCookie(RememberMeCookie rememberMeCookie, HttpServletResponse response) {
      Cookie cookie = new Cookie(rememberMeCookie.getName(), rememberMeCookie.getValue());
      cookie.setHttpOnly(true);
      cookie.setSecure(true);
      rememberMeCookie.getMaxAge().ifPresent(cookie::setMaxAge);
      rememberMeCookie.getDomain().ifPresent(domain -> cookie.setDomain(stripLeadingDot(domain)));
      rememberMeCookie.getPath().ifPresent(cookie::setPath);
      CookieUtil.setCookie(response, cookie, KnownSameSitePolicy.LAX);
   }

   private static String stripLeadingDot(String s) {
      return !s.startsWith(".") ? s : StringUtils.substring(s, 1);
   }

   private RememberMeCookieHeaderValueFactory() {
      throw new AssertionError();
   }
}
