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

import com.airlock.iam.common.domain.model.response.CacheControlResponseHeader;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import jakarta.ws.rs.container.ContainerRequestContext;
import jakarta.ws.rs.core.CacheControl;
import jakarta.ws.rs.core.Response.ResponseBuilder;
import jakarta.ws.rs.ext.RuntimeDelegate;
import java.util.Optional;

public class CacheControlResponseHeaderServiceImpl implements CacheControlResponseHeaderService {
   private final Provider<CacheControlResponseHeader> cacheControlResponseHeader;

   @Inject
   public CacheControlResponseHeaderServiceImpl(Provider<CacheControlResponseHeader> cacheControlResponseHeader) {
      this.cacheControlResponseHeader = cacheControlResponseHeader;
   }

   @Override
   public ResponseBuilder setCacheControlHeader(ResponseBuilder defaultResponse, ContainerRequestContext requestContext) {
      Optional<String> cacheControlHeaderValue = ((CacheControlResponseHeader)this.cacheControlResponseHeader.get()).value();
      if (cacheControlHeaderValue.isPresent()) {
         requestContext.setProperty("disable-cache-control-override", true);
         return defaultResponse.cacheControl(
            (CacheControl)RuntimeDelegate.getInstance().createHeaderDelegate(CacheControl.class).fromString(cacheControlHeaderValue.get())
         );
      } else {
         return defaultResponse;
      }
   }
}
