package org.jboss.resteasy.test.resource.param.resource;

import javax.ws.rs.Consumes;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.Encoded;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import java.util.List;
import java.util.SortedSet;

@Path(value = "/FormParamTest/")
public class FormParamBasicResource {
   @Path(value = "/ParamEntityWithFromString")
   @POST
   @Consumes("application/x-www-form-urlencoded")
   public Response fromString(
         @Encoded @DefaultValue("FromString") @FormParam("default_argument") FormParamEntityWithFromString defaultArgument) {
      return Response.ok(response(defaultArgument.getValue())).build();
   }

   public static final String response(String argument) {
      return new StringBuilder().append("CTS_FORMPARAM:").append(argument)
            .toString();
   }

   @Path(value = "/string")
   @POST
   @Consumes("application/x-www-form-urlencoded")
   public Response string(
         @Encoded @DefaultValue("FromString") @FormParam("default_argument") String defaultArgument) {
      return Response.ok(response(defaultArgument)).build();
   }

   @Path(value = "/SortedSetFromString")
   @POST
   @Consumes("application/x-www-form-urlencoded")
   public Response sortedSetFromString(
         @Encoded @DefaultValue("SortedSetFromString") @FormParam("default_argument") SortedSet<FormParamEntityWithFromString> defaultArgument) {
      return Response.ok(response(defaultArgument.first().getValue()))
            .build();
   }

   @Path(value = "/ListConstructor")
   @POST
   @Consumes("application/x-www-form-urlencoded")
   public Response defaultListConstructor(
         @DefaultValue("ListConstructor") @FormParam("default_argument") List<FormParamEntityWithConstructor> defaultArgument) {
      return Response.ok(
            response(defaultArgument.listIterator().next().getValue()))
            .build();
   }

   @Path(value = "/IllegalArgumentException")
   @POST
   @Consumes("application/x-www-form-urlencoded")
   public Response throwWebApplicationException(
         @DefaultValue("SortedSetFromString") @FormParam("default_argument") FormParamEntityThrowsIllegaArgumentException defaultArgument) {
      return Response.ok().build();
   }


}
