package org.jboss.resteasy.client.jaxrs.i18n;

import java.io.OutputStream;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Method;
import java.lang.reflect.TypeVariable;
import java.util.function.Supplier;

import jakarta.ws.rs.client.ResponseProcessingException;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;

import org.jboss.logging.annotations.Message;
import org.jboss.logging.annotations.Message.Format;
import org.jboss.logging.annotations.MessageBundle;
import org.jboss.logging.annotations.Param;
import org.jboss.logging.annotations.Signature;

/**
 *
 * @author <a href="ron.sigal@jboss.com">Ron Sigal</a>
 * @version $Revision: 1.1 $
 *
 *          Copyright Aug 26, 2015
 */
@MessageBundle(projectCode = "RESTEASY")
public interface Messages {
    Messages MESSAGES = org.jboss.logging.Messages.getBundle(MethodHandles.lookup(), Messages.class);

    int BASE = 4500;

    @Message(id = BASE
            + 0, value = "You can only set one of LinkHeaderParam.rel() and LinkHeaderParam.title() for on {0}.{1}", format = Format.MESSAGE_FORMAT)
    String canOnlySetOneLinkHeaderParam(String className, String methodName);

    @Message(id = BASE + 05, value = "Cannot set a form parameter if entity body already set")
    String cannotSetFormParameter();

    @Message(id = BASE + 10, value = "Client is closed.")
    String clientIsClosed();

    @Message(id = BASE + 15, value = "Client Proxy for : %s")
    String clientProxyFor(String className);

    @Message(id = BASE + 20, value = "Could not create a URL for {0} in {1}.{2}", format = Format.MESSAGE_FORMAT)
    String couldNotCreateURL(String uri, String className, String methodName);

    @Message(id = BASE
            + 25, value = "Marking file '%s' to be deleted, as it could not be deleted while processing request:")
    String couldNotDeleteFile(String path);

    @Message(id = BASE + 30, value = "Could not find a method for: %s")
    String couldNotFindMethod(Method method);

    @Message(id = BASE + 35, value = "Could not process method %s")
    String couldNotProcessMethod(Method method);

    @Message(id = BASE + 40, value = "%s does not specify the type parameter T of GenericType<T>")
    String doesNotSpecifyTypeParameter(TypeVariable<?> var);

    @Message(id = BASE + 45, value = "The entity was already read, and it was of type %s")
    String entityAlreadyRead(Class<?> clazz);

    @Message(id = BASE + 50, value = "failed on registering class: %s")
    String failedOnRegisteringClass(String className);

    @Message(id = BASE + 55, value = "Failed to buffer aborted response")
    String failedToBufferAbortedResponse();

    @Message(id = BASE
            + 60, value = "Failed to buffer aborted response. Could not find writer for content-type {0} type: {1}", format = Format.MESSAGE_FORMAT)
    String failedToBufferAbortedResponseNoWriter(MediaType mediaType, String className);

    @Message(id = BASE + 65, value = "A GET request cannot have a body.")
    String getRequestCannotHaveBody();

    @Message(id = BASE + 75, value = "Input stream was empty, there is no entity")
    String inputStreamWasEmpty();

    @Message(id = BASE + 80, value = "link was null")
    String linkWasNull();

    @Message(id = BASE + 85, value = "method was null")
    String methodWasNull();

    @Message(id = BASE
            + 90, value = "You must define a @Consumes type on your client method or interface, or supply a default")
    String mustDefineConsumesType();

    @Message(id = BASE
            + 95, value = "You must set either LinkHeaderParam.rel() or LinkHeaderParam.title() for on {0}.{1}", format = Format.MESSAGE_FORMAT)
    String mustSetLinkHeaderParam(String className, String methodName);

    @Message(id = BASE + 100, value = "You must use at least one, but no more than one http method annotation on: %s")
    String mustUseExactlyOneHttpMethod(String methodName);

    @Message(id = BASE + 105, value = "name was null")
    String nameWasNull();

    @Message(id = BASE + 110, value = "No type information to extract entity with.  You use other getEntity() methods")
    String noTypeInformation();

    @Message(id = BASE + 115, value = "parameters was null")
    String parametersWasNull();

    @Message(id = BASE + 120, value = "path was null")
    String pathWasNull();

    @Message(id = BASE
            + 123, value = "Please consider updating the version of Apache HttpClient being used.  Version 4.3.6+ is recommended.")
    String pleaseConsiderUnpdating();

    @Message(id = BASE + 125, value = "proxyInterface was null")
    String proxyInterfaceWasNull();

    @Message(id = BASE + 130, value = "resource was null")
    String resourceWasNull();

    @Message(id = BASE + 135, value = "Resteasy Client Proxy for : %s")
    String resteasyClientProxyFor(String className);

    @Message(id = BASE + 140, value = "Stream is closed")
    String streamIsClosed();

    @Message(id = BASE + 145, value = "templateValues entry was null")
    String templateValuesEntryWasNull();

    @Message(id = BASE + 150, value = "templateValues was null")
    String templateValuesWasNull();

    @Message(id = BASE + 152, value = "Unable to create new instance of %s")
    String unableToInstantiate(Class<?> clazz);

    @Message(id = BASE + 155, value = "Unable to invoke request: {0}", format = Format.MESSAGE_FORMAT)
    String unableToInvokeRequest(String msg);

    @Message(id = BASE + 160, value = "uriBuilder was null")
    String uriBuilderWasNull();

    @Message(id = BASE + 165, value = "uri was null")
    String uriWasNull();

    @Message(id = BASE + 170, value = "value was null")
    String valueWasNull();

    @Message(id = BASE + 180, value = "Could not close http response")
    String couldNotCloseHttpResponse();

    @Message(id = BASE + 185, value = "Unable to set http proxy")
    String unableToSetHttpProxy();

    @Message(id = BASE + 190, value = "Parameter annotated with %s cannot be null")
    String nullParameter(String annotation);

    @Message(id = BASE + 191, value = "Unable to load ClientConfigProvider configuration because uri is null")
    String unableToLoadClientConfigProviderConfiguration();

    @Message(id = BASE + 192, value = "Stream has not been closed. Cannot create input stream from %s.")
    IllegalStateException streamNotClosed(OutputStream out);

    @Message(id = BASE + 193, value = "The stream has already been exported.")
    Supplier<IllegalStateException> alreadyExported();

    @Message(id = BASE + 194, value = "No content type found in response. Cannot extract the response value.")
    @Signature(messageIndex = 1, value = { Response.class, String.class })
    ResponseProcessingException noContentTypeFound(@Param Response response);

    @Message(id = BASE + 195, value = "Expected type %s, but found type %s for the configuration.")
    IllegalStateException invalidClientBuilderConfiguration(Class<?> found, Class<?> expected);
}
