package sklep.rest;

import jakarta.inject.Inject;
import jakarta.persistence.EntityManager;
import jakarta.persistence.TypedQuery;
import jakarta.transaction.Transactional;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import sklep.model_jpa.Product;

import java.util.List;

@Path("/d/products")
@Produces(MediaType.APPLICATION_JSON)
public class DProducts {
    @Inject
    private EntityManager em;

    @GET
    public List<Product> allProducts() {
        TypedQuery<Product> query = em.createNamedQuery("Product.findAll", Product.class);
        return query.getResultList();
    }

    @Path("/{id}")
    @GET
    public Product oneProduct(@PathParam("id") Integer id) {
        Product product = em.find(Product.class, id);
        if(product == null) {
            throw new WebApplicationException(404);
        }
        return product;
    }

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Transactional
    public Product addProduct(Product product) {
        em.persist(product);
        em.flush();
        // odsyłam uzupełniony obiekt produktu, aby klient poznał ID, pod jakim został zapisany
        return product;
    }

}