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

import com.airlock.iam.base.api.domain.model.exception.EntityNotUniqueException;
import com.airlock.iam.base.api.infrastructure.uri.ExternalUriInfo;
import com.airlock.iam.base.infrastructure.error.ErrorResponse;
import com.airlock.iam.base.misc.log.LogUtil;
import com.airlock.iam.common.infrastructure.logger.LogTypes;
import com.airlock.iam.elog.api.ELogger;
import com.airlock.iam.elog.api.ELoggerFactory;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.ext.ExceptionMapper;
import org.apache.commons.lang3.Strings;

@jakarta.ws.rs.ext.Provider
public final class EntityNotUniqueExceptionMapper implements ExceptionMapper<EntityNotUniqueException> {
   private static final ELogger LOG = ELoggerFactory.getLogger(EntityNotUniqueExceptionMapper.class);
   private final Provider<ExternalUriInfo> uriInfo;

   @Inject
   public EntityNotUniqueExceptionMapper(Provider<ExternalUriInfo> uriInfo) {
      this.uriInfo = uriInfo;
   }

   public Response toResponse(EntityNotUniqueException exception) {
      String requestPath = LogUtil.logSafeQuote(Strings.CS.prependIfMissing(((ExternalUriInfo)this.uriInfo.get()).getPath(), "/", new CharSequence[0]));
      LOG.info(LogTypes.REST_EXCEPTION_HANDLER, "Entity already exists during call to " + requestPath + ": " + exception.getMessage());
      return ErrorResponse.conflict().build().toResponse();
   }
}
