package gov.va.med.mpn.codedcontrol;

import gov.va.med.mpn.codedcontrol.model.UserResponse;
import gov.va.med.mpn.entity.pojo.CodedControlData;

import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.springframework.jmx.export.annotation.ManagedResource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;


// TODO: Auto-generated Javadoc
/**
 * The Interface CodedControl contains all the REST endpoints for codedControl calls.
 * <p> 
 * <A HREF="http://www.hp.com"> Hewlett-Packard Enterprise Services</A> 
 * </p> 
 * 
 * @author <a href="mailto:pratap.chilukuri@hp.com">Pratap Chilukuri</a> 
 */


@Path("/codedcontrolservice/")
@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})

@Service(value = "codedControlService")
@Transactional
@ManagedResource
public interface CodedControl {
  
    /**
     * Fetch control.
     *
     * @param path the path:.*
     * @return the user response
     */
    @GET
    @Path("/control/{path:.*}")
    public UserResponse fetchControl(@PathParam("path") String path);
    
    /**
     * Fetch control with the given uuid.
     *
     * @param uuid the uuid
     * @return the user response
     */
    @GET
	@Path("/controlbyuuid/uuid/{uuid}")
	public UserResponse fetchControlByUuid(@PathParam("uuid") String uuid);
    
    /**
     * Fetch categories.
     *
     * @return the user response
     */
    @GET
    @Path("/categories/")
    public UserResponse fetchCategories();
    
    /**
     * Fetch classes.
     *
     * @return the user response
     */
    @GET
    @Path("/classes/")
    public UserResponse fetchClasses();
    
    /**
     * Creates the control.
     *
     * @param control the control
     * @return the user response
     */
// PNCSSF-1528 This method commented out, pending implementing access control for this service.
//    @PUT
//    @Path("/control/")
//    public UserResponse createControl(CodedControlData control);
    
    /**
     * Update control.
     *
     * @param control the control
     * @return the user response
     */
// PNCSSF-1528 This method commented out, pending implementing access control for this service.
//    @POST
//    @Path("/control/")
//    public UserResponse updateControl(CodedControlData control);
    
    /**
     * Delete control.
     *
     * @param id the id
     * @return the user response
     */
// PNCSSF-1528 This method commented out, pending implementing access control for this service.
//    @DELETE
//	@Path("control/uuid/{uuid}")
//	public UserResponse deleteControl(final @PathParam("uuid") String id);
   

}