package com.jasamedika.medifirst2000.dao;

import java.util.List;
import java.util.Map;

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import com.jasamedika.medifirst2000.entities.ProdukFarmakologi;

@Repository("produkFarmakologiDao")
public interface ProdukFarmakologiDao extends PagingAndSortingRepository<ProdukFarmakologi, Integer> {

	String allProduk = "select new Map(prf.id as produkId,prf.namaProduk as namaProduk,"
			+ "prf.kdProduk as kdProduk,(case when prf.kdProduk = 1 then 'Pelayanan Pasien (Tarif)' "
			+ "when prf.kdProduk = 2 then 'Pelayanan Pasien (Nontarif)' "
			+ "when prf.kdProduk = 3 then 'Pelayanan Nonpasien' end) as kodeProduk) " + "from ProdukFarmakologi prf "
			+ "where prf.statusEnabled is true";

	String namaProduk = " and lower(prf.namaProduk) like %:namaProduk%";

	String kdProduk = " and prf.kdProduk = :kdProduk";

	String sortAllProduk = " order by prf.namaProduk, prf.kdProduk asc";

	String listIdProduk = " and prf.id in (:listProdukId)";

	@Query(allProduk + sortAllProduk)
	public List<Map<String, Object>> findProdukFarmakologi();

	@Query(allProduk + namaProduk + sortAllProduk)
	public List<Map<String, Object>> findProdukFarmakologiByProduk(@Param("namaProduk") String namaProduk);

	@Query(allProduk + kdProduk + sortAllProduk)
	public List<Map<String, Object>> findProdukFarmakologiByKdProduk(@Param("kdProduk") Short kdProduk);

	@Query(allProduk + namaProduk + kdProduk + sortAllProduk)
	public List<Map<String, Object>> findProdukFarmakologiByProduk(@Param("namaProduk") String namaProduk,
			@Param("kdProduk") Short kdProduk);

	@Query(allProduk + listIdProduk + sortAllProduk)
	public List<Map<String, Object>> findProdukFarmakologi(@Param("listProdukId") List<Integer> listIdProduk);

	String dupCheck = "select prf.id from ProdukFarmakologi prf " + "where prf.statusEnabled is true "
			+ "and lower(regexp_replace(prf.namaProduk,:patternText,'','g')) = :namaProduk";

	String notIdProduk = " and prf.id <> :produkId";

	@Query(dupCheck)
	public List<Integer> findDupProduk(@Param("patternText") String patternText,
			@Param("namaProduk") String namaProduk);

	@Query(dupCheck + notIdProduk)
	public List<Integer> findDupProduk(@Param("patternText") String patternText, @Param("namaProduk") String namaProduk,
			@Param("produkId") Integer idProduk);

}
