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

import javax.ws.rs.GET;
import javax.ws.rs.MatrixParam;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.PathSegment;
import javax.ws.rs.core.UriInfo;
import java.util.List;

@Path("/cars/{make}")
public class PathParamCarResource {
   @GET
   @Path("/matrixparam/{model}/{year}")
   @Produces("text/plain")
   public String getFromMatrixParam(@PathParam("make") String make,
                                     @PathParam("model") PathSegment car,
                                     @MatrixParam("color") Color color,
                                     @PathParam("year") String year) {
      return "A " + color + " " + year + " " + make + " " + car.getPath();
   }

   @GET
   @Path("/pathsegment/{model}/{year}")
   @Produces("text/plain")
   public String getFromPathSegment(@PathParam("make") String make,
                                     @PathParam("model") PathSegment car,
                                     @PathParam("year") String year) {
      String carColor = car.getMatrixParameters().getFirst("color");
      return "A " + carColor + " " + year + " " + make + " " + car.getPath();
   }

   @GET
   @Path("/pathsegments/{model : .+}/year/{year}")
   @Produces("text/plain")
   public String getFromMultipleSegments(@PathParam("make") String make,
                                          @PathParam("model") List<PathSegment> car,
                                          @PathParam("year") String year) {
      String output = "A " + year + " " + make;
      for (PathSegment segment : car) {
         output += " " + segment.getPath();
      }
      return output;
   }

   @GET
   @Path("/uriinfo/{model}/{year}")
   @Produces("text/plain")
   public String getFromUriInfo(@Context UriInfo info) {
      String make = info.getPathParameters().getFirst("make");
      String year = info.getPathParameters().getFirst("year");
      PathSegment model = info.getPathSegments().get(3);
      String color = model.getMatrixParameters().getFirst("color");

      return "A " + color + " " + year + " " + make + " " + model.getPath();
   }

   public enum Color {
      red,
      white,
      blue,
      black
   }
}
