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

import com.airlock.iam.base.api.infrastructure.uri.ExternalUriInfo;
import jakarta.ws.rs.core.Link;
import jakarta.ws.rs.core.UriBuilder;
import jakarta.ws.rs.core.Link.Builder;
import java.net.URI;
import org.apache.commons.lang3.Strings;

public final class Resources {
   public static UriBuilder uri(ExternalUriInfo uriInfo, Class<?> resourceClass) {
      return uriInfo.getBaseUriBuilder().path(resourceClass);
   }

   public static UriBuilder fromResource(Class<?> resourceClass) {
      return UriBuilder.fromResource(resourceClass);
   }

   public static UriBuilder toProtectedUri(ExternalUriInfo uriInfo, Class<?> protectedResourceClass) {
      URI protectedBaseUri = URI.create(Strings.CS.removeEnd(uriInfo.getBaseUri().toString(), "/")).resolve("protected");
      return UriBuilder.fromUri(protectedBaseUri).path(protectedResourceClass);
   }

   public static Builder link(ExternalUriInfo uriInfo, Class<?> resourceClass) {
      return Link.fromUriBuilder(uri(uriInfo, resourceClass));
   }

   public static Builder link(ExternalUriInfo uriInfo, Class<?> resourceClass, String path) {
      return Link.fromUriBuilder(uri(uriInfo, resourceClass).path(path));
   }

   private Resources() {
      throw new AssertionError();
   }
}
