package com.jasamedika.medifirst2000.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.jasamedika.medifirst2000.dao.custom.DaftarRKAKLTahunanDaoCustom;
import com.jasamedika.medifirst2000.dto.DaftarPengajuanAnggaranDto;
import com.jasamedika.medifirst2000.service.DaftarRKAKLTahunanService;

@Service("DaftarRKAKLTahunanService")
public class DaftarRKAKLTahunanServiceImpl extends BaseAngaranServiceImpl implements DaftarRKAKLTahunanService {

	@Autowired
	private DaftarRKAKLTahunanDaoCustom daftarRKAKLTahunanDaoCustom;

	@Override
	public Map<String, Object> findRiwayat(Integer page, Integer limit, String sort, String dir, String noRec,
			Integer tahun) {

		Map<String, Object> result = new HashMap<String, Object>();

		try {
			System.out.println("=======START FIND DAFTAR RIWAYAT RKA KL TAHUNAN=======");

			List<DaftarPengajuanAnggaranDto> dtoList = new ArrayList<DaftarPengajuanAnggaranDto>();
			List<Map<String, Object>> resultMap = daftarRKAKLTahunanDaoCustom.findRiwayat(sort, dir, tahun);
			for (int i = 0; i < resultMap.size(); i++) {
				DaftarPengajuanAnggaranDto dto = new DaftarPengajuanAnggaranDto();
				dto.setTahun(Integer.parseInt(resultMap.get(i).get("tahun").toString()));
				dtoList.add(dto);
			}
			result.put("result", dtoList);
			System.out.println("=======END FIND DAFTAR RIWAYAT RKA KL TAHUNAN=======");
		} catch (Exception e) {
			e.printStackTrace();
		}

		return result;
	}

	@Override
	public Map<String, Object> getDetailRKAKL(Integer page, Integer limit, String sort, String dir, Integer tahun) {

		Map<String, Object> result = new HashMap<String, Object>();

		try {
			System.out.println("=======START FIND DETAIL RKA-KL=======");

			// get head anggaran
			List<Map<String, Object>> resultMap = daftarRKAKLTahunanDaoCustom.getDaftarHeadAnggaran(tahun);
			// get kegiatan detail
			List<Map<String, Object>> resultMapKegiatan = daftarRKAKLTahunanDaoCustom.getDetailKegiatanRKAKL();
			// get mata anggaran
			List<Map<String, Object>> resultMapMataAnggaran = daftarRKAKLTahunanDaoCustom.getMataAnggaran(tahun);
			// get nama paket usulan
			List<Map<String, Object>> resultMapPaketUsulan = daftarRKAKLTahunanDaoCustom.getPaketUsulan();

			List<DaftarPengajuanAnggaranDto> dtoList = new ArrayList<DaftarPengajuanAnggaranDto>();
			DaftarPengajuanAnggaranDto dto = new DaftarPengajuanAnggaranDto();
			Map<String, Object> dataKegiatanDetail = new HashMap<String, Object>();
			Map<String, Object> dataMataAng = new HashMap<String, Object>();
			Map<String, Object> dataPaketUsulan = new HashMap<String, Object>();

			for (Map<String, Object> thn : resultMap) {
				dto.setTahun(Integer.parseInt(thn.get("tahun").toString()));
				dto.setListKegiatanDetail(new ArrayList<Map<String, Object>>());
				for (Map<String, Object> kegiatanDetail : resultMapKegiatan) {
					if (kegiatanDetail.get("tahunHeadAnggaran").equals(thn.get("tahun"))) {
						dataKegiatanDetail.put("kodeKegiatanDetail", kegiatanDetail.get("kodeKegiatanDetail"));
						dataKegiatanDetail.put("namaKegiatanDetail", kegiatanDetail.get("namaKegiatanDetail"));

					}
					for (Map<String, Object> mataAng : resultMapMataAnggaran) {
						if (kegiatanDetail.get("kegiatanId").equals(mataAng.get("kegiatanId"))
								&& thn.get("tahun").equals(mataAng.get("tahun"))) {
							// dataMataAng.put("kodeMataAnggaran",
							// mataAng.get("kodeMataAnggaran"));
							// dataMataAng.put("namaMataAnggaran",
							// mataAng.get("namaMataAnggaran"));
							// dto.getListMataAnggaran().add(dataMataAng);
							dataMataAng.put("listMataAnggaran", resultMapMataAnggaran);

						}
						for (Map<String, Object> paketUsulan : resultMapPaketUsulan) {

							if (thn.get("tahun").equals(paketUsulan.get("tahun"))
									&& kegiatanDetail.get("kegiatanId").equals(paketUsulan.get("kegiatanId"))
									&& paketUsulan.get("akunId").equals(mataAng.get("akunId"))) {
								// dataPaketUsulan.put("paketUsulan",
								// paketUsulan.get("paketUsulan"));
								// dto.getListSpesifikasi().add(dataPaketUsulan);
								dataPaketUsulan.put("listPaketUsulan", resultMapPaketUsulan);

							}
						}
					}
				}
			}
			dto.getListKegiatanDetail().add(dataKegiatanDetail);
			dto.getListKegiatanDetail().add(dataMataAng);
			dtoList.add(dto);
			result.put("result", dtoList);
			System.out.println("=======END FIND DETAIL RKA-KL=======");
		} catch (Exception e) {
			e.printStackTrace();
		}

		return result;
	}

}
