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

import ch.ergon.restal.jsonapi.document.error.ErrorData;
import com.airlock.iam.base.api.infrastructure.uri.ExternalUriInfo;
import com.airlock.iam.base.misc.log.LogUtil;
import com.airlock.iam.common.api.domain.model.exception.SmsGatewayUnavailableException;
import com.airlock.iam.common.infrastructure.exception.BaseExceptionMapper;
import com.airlock.iam.common.infrastructure.exception.IamRestErrorCode;
import com.airlock.iam.elog.api.LogTypes;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import jakarta.ws.rs.core.Response.Status;

@jakarta.ws.rs.ext.Provider
public final class SmsGatewayUnavailableExceptionMapper extends BaseExceptionMapper<SmsGatewayUnavailableException> {
   @Inject
   public SmsGatewayUnavailableExceptionMapper(Provider<ExternalUriInfo> uriInfo) {
      super(Status.INTERNAL_SERVER_ERROR, IamRestErrorCode.EXTERNAL_SERVICE_UNAVAILABLE, uriInfo);
   }

   protected void logException(SmsGatewayUnavailableException exception, ErrorData data) {
      LOG.fatal(LogTypes.SMS_GATEWAY, String.format("Exception from calling an external service: %s", LogUtil.logSafeString(exception.getMessage())));
      if (LOG.isDebugEnabled() && !this.shouldLogStacktraceAsError(exception)) {
         LOG.debug(data.toString(), exception);
      }
   }
}
