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

import com.airlock.iam.base.api.domain.model.validation.ValidatorError;
import com.airlock.iam.base.api.infrastructure.uri.ExternalUriInfo;
import com.airlock.iam.base.infrastructure.error.GenericRestErrorCode;
import com.airlock.iam.base.infrastructure.mapper.ValidationToErrorMapper;
import com.airlock.iam.base.infrastructure.validation.ConstraintViolationType;
import com.airlock.iam.common.application.exception.RequestDocumentAttributesMissingException;
import com.airlock.iam.common.infrastructure.mapper.PrefixFieldMapper;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status;
import java.util.List;

@jakarta.ws.rs.ext.Provider
public class RequestDocumentAttributesMissingExceptionMapper extends BaseExceptionMapper<RequestDocumentAttributesMissingException> {
   private final ValidationToErrorMapper errorMapper;

   @Inject
   public RequestDocumentAttributesMissingExceptionMapper(Provider<ExternalUriInfo> uriInfo, ValidationToErrorMapper errorMapper) {
      super(Status.BAD_REQUEST, GenericRestErrorCode.VALIDATION_FAILED, uriInfo);
      this.errorMapper = errorMapper;
   }

   public Response toResponse(RequestDocumentAttributesMissingException exception) {
      return this.errorMapper
         .withFieldToSourcePointerMapper(PrefixFieldMapper.builder().prefix("data").build())
         .useErrorCode(GenericRestErrorCode.VALIDATION_FAILED)
         .withStatus(Status.BAD_REQUEST)
         .mapToResponse(List.of(ValidatorError.validatorError("attributes", ConstraintViolationType.REQUIRED)));
   }
}
