package com.airlock.iam.apipolicyservice.health.infrastructure.resource;

import com.airlock.iam.elog.api.EDefaultLogType;
import com.airlock.iam.elog.api.ELogger;
import com.airlock.iam.elog.api.ELoggerFactory;
import com.airlock.iam.health.infrastructure.HealthCheckWireFormat;
import com.airlock.iam.health.infrastructure.service.ModuleReadinessService;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.Response;
import java.io.IOException;

@Path("/ready")
public final class ApiPolicyServiceReadinessResource {
   private static final ELogger LOG = ELoggerFactory.getLogger(ApiPolicyServiceReadinessResource.class);
   private final Provider<ModuleReadinessService> service;

   @Inject
   public ApiPolicyServiceReadinessResource(Provider<ModuleReadinessService> service) {
      this.service = service;
   }

   @GET
   @Produces("application/json")
   public Response checkReadiness() {
      HealthCheckWireFormat result = ((ModuleReadinessService)this.service.get()).checkAll();

      try {
         return Response.ok().entity(result.toJson()).build();
      } catch (IOException e) {
         LOG.warn(EDefaultLogType.GENERIC_LOG_TYPE, "Failed to produce readiness check response", e);
         return Response.serverError().build();
      }
   }
}
