package com.jasamedika.medifirst2000.dao;

import java.util.List;

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.HargaNettoProdukByKelas;
import com.jasamedika.medifirst2000.vo.InformasiTarifLayananVO;


@Repository
public interface InformasiTarifLayananDao extends PagingAndSortingRepository<HargaNettoProdukByKelas, Integer> {
	
	@Query("Select NEW com.jasamedika.medifirst2000.vo.InformasiTarifLayananVO(p.produk, p.kelas, p.hargaNetto1) from HargaNettoProdukByKelas p, MapRuanganToProduk q where p.produk.id = q.produk.id ")
	public List<InformasiTarifLayananVO> getInformasiTarifRuangan();
	
	@Query("Select p from HargaNettoProdukByKelas p where p.produk.id=:produkId ")
	public List<HargaNettoProdukByKelas> getHargaByIdProduk(@Param("produkId") Integer produkId);
	
	@Query("Select p from HargaNettoProdukByKelas p ")
	public List<HargaNettoProdukByKelas> getAllHarga();
	
	@Query("Select p from HargaNettoProdukByKelas p where lower(p.produk.namaProduk) like lower(CONCAT('%',:namaProduk,'%')) ")
	public List<HargaNettoProdukByKelas> getHargaNettoByNamaProduk(@Param("namaProduk")String namaProduk);
	
	// ------------------ //
	
	@Query("Select NEW com.jasamedika.medifirst2000.vo.InformasiTarifLayananVO(p.produk, p.kelas, p.hargaNetto1) from HargaNettoProdukByKelas p where p.produk.id=:produkId ")
	public List<InformasiTarifLayananVO> getInformasiHargaByIdProduk(@Param("produkId") Integer produkId);
	
	@Query("Select NEW com.jasamedika.medifirst2000.vo.InformasiTarifLayananVO(p.produk, p.kelas, p.hargaNetto1) from HargaNettoProdukByKelas p where p.produk.detailJenisProduk.id in (Select cast(s.nilaiField as int) from  SettingDataFixed s where s.namaField='KdDetailJenisProdukAkomodasi') ")
	public List<InformasiTarifLayananVO> getAllInformasiHarga();
	
	@Query("Select NEW com.jasamedika.medifirst2000.vo.InformasiTarifLayananVO(p.produk, p.kelas, p.hargaNetto1) from HargaNettoProdukByKelas p where lower(p.produk.namaProduk) like lower(CONCAT('%',:namaProduk,'%')) ")
	public List<InformasiTarifLayananVO> getInformasiHargaNettoByNamaProduk(@Param("namaProduk")String namaProduk);
	
	@Query("select NEW com.jasamedika.medifirst2000.vo.InformasiTarifLayananVO(p.kelas, p.hargaNetto1, p.produk.kdProduk, p.produk.namaProduk, p.produk.id) from HargaNettoProdukByKelas p where p.produk.id=:produkId ")
	public List<InformasiTarifLayananVO> getInformasiHargaByIdProdukMinimized(@Param("produkId") Integer produkId);
	
}
