package com.jasamedika.medifirst2000.dao;

import java.util.Date;
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.RegistrasiPelayananPasien;

/**
 * Repository class for Ruangan
 * 
 * @author Askur
 */
@Repository("RegistrasiPelayananPasienDao")
public interface RegistrasiPelayananPasienDao extends PagingAndSortingRepository<RegistrasiPelayananPasien, String> {
	// custom query
	@Query("select p from RegistrasiPelayananPasien p where p.pasienDaftar.pasien.noCm=:noCm and p.kdProfile=:kdProfile and date(p.tglMasuk)=:tglRegistrasi ")
	RegistrasiPelayananPasien finByNoCm(@Param("noCm") String noCm,@Param("kdProfile") short kdProfile,@Param("tglRegistrasi") Date tglRegistrasi);
	
	@Query("select count(p.id) from RegistrasiPelayananPasien p where month(p.tglMasuk)=:monthNow and year(p.tglMasuk)=:yearNow ")
	Integer getCountByMonthAndYear(@Param("monthNow") Integer monthNow, @Param("yearNow") Integer yearNow);
	
	@Query("select p from RegistrasiPelayananPasien p where p.pasienDaftarId=:noRec")
	RegistrasiPelayananPasien finByNoRec(@Param("noRec") String noRec);
	
	@Query("select p from RegistrasiPelayananPasien p where p.pasienDaftarId=:noRec")
	List<RegistrasiPelayananPasien> finByNoRecs(@Param("noRec") String noRec);
//	@Query("select p from RegistrasiPelayananPasien p where p.pasien.noCm=:noCm")
//	RegistrasiPelayananPasien findPasienByNoCM(@Param("noCm") String noCm);
//
	@Query("select p from RegistrasiPelayananPasien p where p.noRec=:noRec")
	RegistrasiPelayananPasien findPasien(@Param("noRec") String noRec);
	
	
	@Query("select p from RegistrasiPelayananPasien p where p.pasienDaftar.pasien.noCm=:noCm ")
	RegistrasiPelayananPasien findPasienByNoCM(@Param("noCm")String noCm);
	
//	@Query("select p from RegistrasiPelayananPasien p where p.pasienDaftar.noRec=:noRec")
//	RegistrasiPelayananPasien findPasien(@Param("noRec") String noRec);	
	
	@Query("select distinct NEW Map ("
			+ "a.noRec as noRec, "
			+ "c.id as kelasId, "
			+ "c.namaKelas as namaKelas, "
			+ "d.id as ruanganId, "
			+ "a.kamarId as kamarId, "
			+ "a.noBed as noBed) "
			+ "from RegistrasiPelayananPasien a "
			+ "left join a.pasienDaftar b "
			+ "left join b.kelas c "
			+ "left join b.ruangan d "
			+ "where b.noRec=:noRec")
	Map<String, Object> loadRencanaPindah(
			@Param("noRec")String noRec);
	
	@Query(" select setting.nilaiField as nilaiField "+  
			" from SettingDataFixed setting"+			
			" where setting.namaField = 'JenisProdukRadiologi'")
	public String findIdJenisProduk();	
	
	@Query(" select new map(jenisProduk.id as id, jenisProduk.jenisProduk as namaJenisProduk) "+
			"from JenisProduk jenisProduk "+
			"left join  jenisProduk.kelompokProduk kelompokProduk "+
			"where kelompokProduk.id = :idJenisProduk")
	public List<Map<String,Object>> findJenisProduk(@Param("idJenisProduk")Integer idJenisProduk);	
	
	@Query("select p from RegistrasiPelayananPasien p where p.pasienDaftar.noRec=:noRec and p.statusKeluar is null ")
	public List<RegistrasiPelayananPasien> finByNoRecPasiendaftar(@Param("noRec") String noRec);
	
	@Query(" select produk.id "+
			" from MapRuanganToProduk mapping  "+
			" left join mapping.ruangan ruangan "+
			" left join mapping.produk produk "+
			" left join produk.detailJenisProduk detailjenis "+
			" left join detailjenis.jenisProduk jenisProduk "+
			" where jenisProduk.id = :jenisProdukId and ruangan.id = :ruanganId")
	public List<Integer> findIdProduk(@Param("ruanganId")Integer ruanganId,@Param("jenisProdukId")Integer jenisProdukId);	
	
}
