package com.jasamedika.medifirst2000.dao.custom.impl;

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

import javax.persistence.Query;

import org.springframework.stereotype.Repository;

import com.jasamedika.medifirst2000.dao.custom.SiklusGiziDaoCustom;
import com.jasamedika.medifirst2000.dao.custom.base.impl.CoreDaoImpl;
import com.jasamedika.medifirst2000.entities.SiklusGizi;
import com.jasamedika.medifirst2000.util.CommonUtil;

@Repository
public class SiklusGiziDaoCustomImpl extends CoreDaoImpl<SiklusGizi>
implements SiklusGiziDaoCustom{

	public SiklusGiziDaoCustomImpl() {
		super(SiklusGizi.class);
	}
	
	@Override
	public List<Map<String, Object>> getSiklus(Integer jenisWaktuId, Integer siklusKe, Integer kelasId,
			Integer jenisDietId, Integer kategoryProdukId, Integer bentukProdukId) {
		StringBuffer buffer = new StringBuffer();
		buffer	.append(" select NEW map( \n")
				.append(" s.id as id, \n")
				.append(" s.siklusKe as siklusKe, \n")
				.append(" s.jenisWaktu.id as jenisWaktuId, \n")
				.append(" s.jenisWaktu.jenisWaktu as jenisWaktu, \n")
				.append(" s.jenisDiet.id as jenisDietId, \n")
				.append(" s.jenisDiet.jenisDiet as jenisDiet, \n")
				.append(" s.kelas.id as kelasId, \n")
				.append(" s.kelas.namaKelas as namaKelas, \n")
				.append(" s.kategoriProduk.id as kategoriProdukId, \n")
				.append(" s.kategoriProduk.kategoryProduk as kategoriProduk, \n")
				.append(" s.produk.id as produkId, \n")
				.append(" s.produk.namaProduk as namaProduk, \n")
				.append(" s.bentukProduk.id as bentukProdukId, \n")
				.append(" s.bentukProduk.namaBentukProduk as namaBentukProduk )\n")
				.append(" from SiklusGizi  s where s.id is not null \n");
		
		if(CommonUtil.isNotNullOrEmpty(jenisWaktuId)){
			buffer.append("and s.jenisWaktu.id = :jenisWaktuId \n");
		}
		if(CommonUtil.isNotNullOrEmpty(siklusKe)){
			buffer.append("and s.siklusKe = :siklusKe \n");
		}
		if(CommonUtil.isNotNullOrEmpty(kelasId)){
			buffer.append("and s.kelas.id = :kelasId \n");
		}
		if(CommonUtil.isNotNullOrEmpty(jenisDietId)){
			buffer.append("and s.jenisDiet.id = :jenisDietId \n");
		}
		if(CommonUtil.isNotNullOrEmpty(kategoryProdukId)){
			buffer.append("and s.kategoriProduk.id = :kategoryProdukId \n");
		}
		if(CommonUtil.isNotNullOrEmpty(bentukProdukId)){
			buffer.append("and s.bentukProduk.id in ( :bentukProdukId, 38) \n");
		}
		
			buffer.append("order by s.id asc \n");
			
		Query query = em.createQuery(buffer.toString());
		if(CommonUtil.isNotNullOrEmpty(jenisWaktuId)){
			query.setParameter("jenisWaktuId",jenisWaktuId);
		}
		if(CommonUtil.isNotNullOrEmpty(siklusKe)){
			query.setParameter("siklusKe",siklusKe);
		}
		if(CommonUtil.isNotNullOrEmpty(kelasId)){
			query.setParameter("kelasId",kelasId);
		}
		if(CommonUtil.isNotNullOrEmpty(jenisDietId)){
			query.setParameter("jenisDietId",jenisDietId);
		}
		if(CommonUtil.isNotNullOrEmpty(kategoryProdukId)){
			query.setParameter("kategoryProdukId",kategoryProdukId);
		}
		if(CommonUtil.isNotNullOrEmpty(bentukProdukId)){
			query.setParameter("bentukProdukId",bentukProdukId);
		}
		
		
		List<Map<String,Object>> list = query.getResultList();

		return list;
	}
	

}
