package NTNU.IDATT1002.repository;

import NTNU.IDATT1002.App;
import NTNU.IDATT1002.models.Image;


import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import java.util.List;


/**
 * Image Repository.
 * <p>
 * Implements {@link  Repository} which supports regular Create, Read, Update and Delete operations.
 *
 * @author Lars Østby
 * @version 1.0 19.03.20
 * @see NTNU.IDATT1002.repository.Repository
 */

public class ImageRepository extends AbstractRepository<Image, Long> {

    /**
     * Mapping to @NamedQuery 'find all albums by username and tags' defined in {@link  Image}
     */
    public static final String IMAGE_FIND_BY_USERNAME = "Image.findAllByUsername";
    public static final String IMAGE_FIND_BY_TAG = "Image.findByTags";

    /**
     * Constructor to inject {@link EntityManager} dependency.
     *
     * @param entityManager the entity manager to utilize
     */
    public ImageRepository(EntityManager entityManager) {
      super(entityManager);
      setEntityClass(Image.class);
    }


    /**
     * Retrieves all albums of the user with the given username.
     *
     * @param username the username to query for
     * @return the list of the users albums.
     */
    public List<Image> findAllByUsername(String username) {
        return entityManager.createNamedQuery(IMAGE_FIND_BY_USERNAME, Image.class)
                .setParameter("username", username)
                .getResultList();
    }

    public List<Image> findAllByTags(String tag){
        return entityManager.createNamedQuery(IMAGE_FIND_BY_TAG, Image.class)
                .setParameter("name",tag)
                .getResultList();
    }

}