package com.airlock.iam.saml2.infrastructure.resource;

import com.airlock.iam.saml2.infrastructure.service.idp.Saml2IdpFederationLibrary;
import com.airlock.iam.saml2.infrastructure.util.Saml2RequestThreadContext;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.core.Response;
import java.io.InputStream;

@Path("/idp/resolve-artifact")
public final class Saml2IdpArtifactResolutionResource {
   private final Provider<Saml2IdpFederationLibrary> library;

   @Inject
   Saml2IdpArtifactResolutionResource(Provider<Saml2IdpFederationLibrary> library) {
      this.library = library;
   }

   @Path("metaAlias/{metaAlias}")
   @POST
   public Response spInitiatedSsoByPost(
      @NotNull(message = "{metaAlias.notNull}") @Size(min = 1, max = 100, message = "{metaAlias.size}") @Pattern(
   regexp = "[a-zA-Z0-9][a-zA-Z0-9-_.]{1,99}",
   message = "{metaAlias.pattern}"
) @PathParam("metaAlias") String metaAlias,
      InputStream is
   ) {
      ((Saml2IdpFederationLibrary)this.library.get()).resolveArtifact(is);
      return Response.status(Saml2RequestThreadContext.getResponse().getStatus()).build();
   }
}
